블로그 이미지
Every unexpected event is a path to learning for you. blueasa

카테고리

분류 전체보기 (2839)
Unity3D (887)
Programming (479)
Server (33)
Unreal (4)
Gamebryo (56)
Tip & Tech (188)
협업 (64)
3DS Max (3)
Game (12)
Utility (140)
Etc (99)
Link (32)
Portfolio (19)
Subject (90)
iOS,OSX (52)
Android (16)
Linux (5)
잉여 프로젝트 (2)
게임이야기 (3)
Memories (20)
Interest (38)
Thinking (38)
한글 (30)
PaperCraft (5)
Animation (408)
Wallpaper (2)
재테크 (19)
Exercise (3)
나만의 맛집 (3)
냥이 (10)
육아 (16)
Total
Today
Yesterday

오랜만에 아이폰 빌드를 앱스토어에 올렸는데

 

애플에게서 다음과 같은 경고 메일을 받았습니다.

 

ITMS-90809: Deprecated API Usage - Apple will stop accepting submissions of apps that use UIWebView APIs . See https://developer.apple.com/documentation/uikit/uiwebview for more information.

 

아직은 단순 경고라서 빌드를 계속 사용할수 있지만, 조만간에는 리젝을 하지 않을까 싶습니다.

 

 

UIWebViewIn apps that run in iOS 8 and later, use the WKWebView class instead of using UIWebView. Additionally, consider setting the WKPreferences property javaScriptEnabled to false if you render files that are not supposed to run JavaScript.

 

물론 UIWebView를 걷어내고 WKWebView로 바꾸면 오류가 발생하지 않습니다.

 

그런데 문제는 서드파티 라이브러리인데요

 

제가 올린 앱에도 uiwebview를 전혀사용하고 있지 않았음에도 저 메세지가 나오고 있어서

 

누가 문제인지 찾아보았습니다

 

프로젝트 폴더에서

 

# grep -r "UIWebView" .

 

로 찾아보니 firebase하고 facebook account kit이 uiwebview를 사용하고 있더라고요

 

 

 

다행히 facebook sdk는

 

5.5.0 버전의 change log를 보니 UIWebView를 WKWebView로 바꾸었다고 나오네요

 

 

firebase도 6.8.0 버전에서 UIWebView를 제거했다고 하네요

 

 

제 프로젝트의 라이브러리들이 옛날버전인것이 문제였군요.

 

자 이제 서드파티 라이브러리를 업데이트 해주시면 됩니다.

 

 

# pod repo update

# pod update

 

이 과정을 통해 최신의 라이브러리를 받긴 했습니다만

 

여전히 facebook accountkit이 uiwebview를 사용하고 있길래 왜그렇지 하고 살펴보니

 

페이스북이 uiwebview를 교체한 5.5.0 버전을 출시하긴 했는데 cocoapod에는 업데이트를 하지 않아서 그렇더라고요.

 

facebook sdk를 최신버전을 받아서 직접 넣거나, 페이스북이 업데이트 해주기를 기다려야겠네요.



출처: https://trend21c.tistory.com/2096 [나를 찾는 아이]

 

UIWebView가 포함된 빌드를 올리면 앱스토어에서 오류가 발생합니다

오랜만에 아이폰 빌드를 앱스토어에 올렸는데 애플에게서 다음과 같은 경고 메일을 받았습니다. ITMS-90809: Deprecated API Usage - Apple will stop accepting submissions of apps that use UIWebView APIs . S..

trend21c.tistory.com

반응형
Posted by blueasa
, |

[추가] KR 폰트에 특수문자(JP폰트에만 있던 특수문자를 KR폰트에도) 추가 병합 (2025-02-20)

[제거] LanguageTitle(언어별 이름'한국어' 등 포함)명칭 제거(필요언어를 모두 포함해서 표기에 문제가 없음) (2025-02-20)

------------------------------------------------------------------------------------------------------------------------------

[추가] KR 폰트에 Hindi 폰트 추가 병합 (2025-02-11)

[추가] JP 폰트에 Arabic/Hindi/Thai 폰트 추가 병합 (2025-02-11)

[추가] 일본어 빠진 글자들 추가(예:璧几眩嗅綺淹憑嘘軋褪贅揉罠鬱化) (2025-02-11)

------------------------------------------------------------------------------------------------------------------------------

[추가] 일본어 빠진 글자들 추가(예:) (2024-06-24)

[추가] 글로벌/일본어 폰트에 특수문자 일부 추가 (2024-06-24)

[제거] 일본어 폰트에서 Thai 언어 제거 (2024-06-24)

[수정] 언어 Subset 업데이트(추가) (2024-06-24)

------------------------------------------------------------------------------------------------------------------------------

[추가] LanguageTitle(언어별 이름'한국어' 등 포함) (2024-05-23)

------------------------------------------------------------------------------------------------------------------------------

[LanguageTitle(언어별 이름) 내용]

한국어 English 日本語 中文(繁體) 中文(简体) Tiếng Việt Español Italiano
Bahasa Indonesia ไทย Português हिन्दी русский Deutsch
العربية

------------------------------------------------------------------------------------------------------------------------------

[추가] NotoSansCJK-hinted-Lite 폰트(Black/Bold/Light/Medium/Regular/Thin)추가 (2024-05-21)

[추가] NotoSansCJK-Medium-Lite 폰트 추가 (2023-12-15)

[수정] 아랍어(Arabic) 폰트 병합 (2020-10-21)

[수정] 태국(Thai) 폰트 병합 (2020-09-14) (참조 : blueasa.tistory.com/2071 )

[수정] '렜' 한글 추가 (2020-08-31)

------------------------------------------------------------------------------------------------------------------------------

 


[NotoSansCJKkr ('일본어 외' 폰트 경량화,Arabic/Hindi/Thai 포함)]

(Black/Bold/Light/Medium/Regular/Thin)

NotoSansCJKkrArabicHindiThai-hinted(Subset).zip
8.81MB

 

[NotoSansCJKjp ('일본어' 폰트 경량화(번체와 ASCII 코드 겹쳐서 분리), English/Arabic/Hindi/Thai 포함)]

(Black/Bold/Light/Medium/Regular/Thin)

NotoSansCJKjpArabicHindiThai-hinted(Subset).zip
4.62MB

 

------------------------------------------------------------------------------------------------------------------------------

 

아래는 폰트 병합하기 전 파일 올려 둠

(CJKkr/ CJKjp는 Subset 파일 올려 둠. 원본 필요하면 Google NotoSans Font 홈페이지로..)

 

[NotoSansCJKkr-hinted(Subset)]

NotoSansCJKkr-hinted(Subset).zip
7.31MB

 

[NotoSansCJKjp-hinted(Subset)]

NotoSansCJKjp-hinted(Subset).zip
3.23MB

 

 

[NotoSansArabic-hinted]

NotoSansArabic-hinted.zip
5.79MB

 

[NotoSansHindi]

NotoSansHindi.zip
1.72MB

 

[NotoSansThai-hinted]

NotoSansThai-hinted.zip
1.32MB

 

 

[폰트 경량화 방법 참조]

https://blueasa.tistory.com/2070

 

[링크] 유니티로 다국어 지원해보자 (Font 경량화)

[링크] https://brunch.co.kr/@brunchgulb/10 [경량화 프로그램 링크] http://opentype.jp/subsetfontmk.htm [경량화 방법 정리] https://spoqa.github.io/2015/10/14/making-spoqa-han-sans.html [각 언어별 필수..

blueasa.tistory.com

 

[폰트 병합 방법 참조]

https://blueasa.tistory.com/2071

 

[펌] 영문 폰트와 한글 폰트 합치기...(Font Creator)

한글을 사용하는 프로그래머를 위한 폰트 라는 글을 포스팅 한적 있습니다.여기서 Bitstream Vera Sans Mono 폰트와 맑은 고딕 폰트를 합친 폰트를 제작 해서 배포 했습니다.하지만 저작권 문제를 배

blueasa.tistory.com

 

반응형
Posted by blueasa
, |

IOS 암호화 사용안할 시 info.plist 수정

 

빌드에서 암호화를 사용하지 않는 경우에는 다음 빌드와 함께 수출 규정 준수 정보를 제공할 필요가 없도록 Info.plist 파일에 키 문자열 값을 사용하십시오.
<key>ITSAppUsesNonExemptEncryption</key><false/>

 

 

[출처] http://cheongbok.blogspot.com/2018/07/ios-infoplist.html

반응형
Posted by blueasa
, |

2020-02-18 01:09:43.567 4919-11220/? E/SignInAuthenticator: ****
    **** APP NOT CORRECTLY CONFIGURED TO USE GOOGLE PLAY GAME SERVICES
    **** This is usually caused by one of these reasons:
    **** (1) Your package name and certificate fingerprint do not match
    ****     the client ID you registered in Developer Console.
    **** (2) Your App ID was incorrectly entered.
    **** (3) Your game settings have not been published and you are 
    ****     trying to log in with an account that is not listed as
    ****     a test account.
    ****
    **** To help you debug, here is the information about this app
    **** Package name         : 모자이크
    **** Cert SHA1 fingerprint: 모자이크
    **** App ID from manifest : 모자이크
    ****
    **** Check that the above information matches your setup in 
    **** Developer Console. Also, check that you're logging in with the
    **** right account (it should be listed in the Testers section if
    **** your project is not yet published).
    ****
    **** For more information, refer to the troubleshooting guide:
    ****   http://developers.google.com/games/services/android/troubleshooting
    ****

--------------------------------------------------------------------------------------

로그인 잘 되던게 구글콘솔(스토어) 등록하면서 갑자기 위와 같은 에러를 내면서 구글플레이게임 로그인이 안됨.

 

  [해결방법]

1. 우선 구글 플레이 콘솔-My App-개발 도구-서비스 및 API-Google Play 게임 서비스-'Google Play 게임 서비스 활성화'를 해줘야 된다고 한다.

2. 1.에서 모든 셋팅을 다 하고, '게임 출시' 까지 한다.('게임 출시'라서 사람 헷갈리게 하는데 Google Play 게임 서비스 출시이다. 앱 출시가 아님)

 

3. '구글 API 콘솔'(https://console.developers.google.com)로 이동해서 API 및 서비스-사용자 인증 정보-OAuth 2.0 클라이언트 ID-My App 클릭

 

4. 구글 API 콘솔 SHA-1과, 구글 플레이 콘솔-앱 서명-업로드 인증서 SHA-1이 같은지 확인

    (KeyStore를 업로드 했다면 콘솔의 업로드 인증서 SHA-1과 KeyStore SHA-1이 같아야 함)

 

5. 3.의 구글 API 콘솔에 등록된 SHA-1이 업로드 인증서 SHA-1과 다르다면 업로드 인증서 SHA-1으로 입력해서 저장.

 

6. 앱에서 정상 로그인 확인.

 

 

P.s. 나의 케이스이니 참조만 하세요.

 

 

[참조1] http://devkorea.co.kr/bbs/board.php?bo_table=m03_qna&wr_id=47275

[참조2] https://www.youtube.com/watch?v=BMGGwjqQRns

반응형
Posted by blueasa
, |

[Error Message]

This release is not compliant with the Google Play 64-bit requirement

The following APKs or App Bundles are available to 64-bit devices, but they only have 32-bit native code: 93.

Include 64-bit and 32-bit native code in your app. Use the Android App Bundle publishing format to automatically ensure that each device architecture receives only the native code it needs. This avoids increasing the overall size of your app.

https://developer.android.com/distribute/best-practices/develop/64-bit

 

[Answer]

For those who have this problem since yesterday (August 19, 2019):

In Player Settings > Other Settings you must now uncheck the x86 box (It is for the 32-bit Intel architecture).


You will now only have the following warning:

The device types on which your application can be installed will be more restricted.

But, in my case, it drops from 12392 devices to 12385 devices.

Here is the opinion of a Unity member on the issue:

x86 is used by less than 0.4% of all Android devices, so it shouldn't have any real impact.

x86 target will be removed completely in Unity 2019.3.

 

[출처]

https://stackoverflow.com/questions/57332053/unity-aab-not-compliant-with-the-google-play-64-bit-requirement

 

Unity aab not compliant with the Google Play 64-bit requirement

I have a Unity project that I'm switching from APKs to AABs (app bundles). Previously, when I was building it as an APK, the Google Play Console told me the APK was 64-bit compliant. Now that I'm

stackoverflow.com

 

반응형
Posted by blueasa
, |

Unity Editor-Edit-Preferences-General에 보면 Script Changes While Playing 옵션이 있다.

 

기본이 위 스크린샷 처럼 'Recompile And Continue Playing'이라서, 플레이 중에 소스 수정하면 리컴파일 되고 에러가 열심히 난다

 

플레이 중엔 리컴파일 안되도록 막기 위해서 2번째인 'Recompile After Finished Playing'로 바꿨다.

 

 

[출처] 게임코디-핑크님

반응형
Posted by blueasa
, |

[참고사항]

- AAB는 유저 다운로드 기준 150mb가 최대이기 때문에 AAB는 165mb 정도가 최대라고 보면 된다고 함.

  (유저가 다운 받을 때 15mb정도 줄어든다고 함)

- OBB는 제한을 걸었다가 다시 풀어서 글 쓰는 현재 기준으로는 기존(APK 100mb + OBB)처럼 사용가능 하다고 함.

 


 

Android App Bundle 빌드하기

먼저 Unity 2018.3 베타에서 프로젝트를 엽니다. APK 대신에 Android App Bundle을 빌드하려면 Build Settings 창(메뉴: File > Build Settings)을 열고 Build App Bundle 체크박스를 선택합니다(Build System은 기본 옵션인 Gradle 유지).

Build를 선택하면 Google Play에 직접 퍼블리시할 수 있는 AAB 파일을 생성합니다.

Build and Run을 선택하면 AAB 파일을 생성한 다음 연결된 기기별 임시 APK 파일을 생성하여 기기에 설치하고 애플리케이션을 실행합니다.

Build를 선택하고 앱을 기기에 수동으로 설치하려면 Google에서 제공하는 bundletool utility(Unity 설치 위치의 Editor/Data/PlaybackEngines/AndroidPlayer/Tools 디렉토리에 있음)를 사용할 수 있습니다. bundletool 플래그와 옵션에 대한 자세한 정보는 여기에서 확인해 보세요.

참고로, 생성된 앱 번들에는 모든 지원 대상의 라이브러리가 포함되어야 하므로 앱 번들을 빌드할 때는 Split APKs by target architecture(Edit > Setting > Player) 옵션이 비활성화되어 있습니다.

 

 

[출처] https://blogs.unity3d.com/kr/2018/10/03/support-for-android-app-bundle-aab-in-unity-2018-3-beta/

 

Android App Bundle(AAB) 기능 지원 - Unity 2018.3 베타 버전에 적용 - Unity Technologies Blog

앱과 게임의 크기가 커질수록 Google Play 스토어 방문을 통한 설치가 줄어들고 있습니다. 사용자가 기기의 스토리지를 사용하고, 요금제 데이터를 소비하며, 연결 속도가 느린 환경에서 다운로드 완료를 기다려야 하는 상황에 대해 이미 신경을 쓰고 있기 때문입니다. Androi...

blogs.unity3d.com

 

반응형
Posted by blueasa
, |

플랫폼 대응을 위해 유니티 버전을 2018.3.5f1에서 2018.4.2f1로 버전업을 하였는데 그 뒤로 비주얼스튜디오를 유니티에 붙이면 멈춤 현상이 일어났다. 당연히 브레이크 포인트에 걸리지 않은 상태였고 Attach를 해제하면 정상작동을 하였다.

원인은 유니티의 오래된 버그라고한다.

해결방법은 비주얼스튜디오에 남아있는 모든 중단점을 삭제한 후 다시 Attach하게되면 정상작동하게된다. 이 후 브레이크포인트를 걸고 작업 후 다시 Attach를 해도 문제없이 작동한다.

출처 : https://forum.unity.com/threads/unity-freeze-when-connecting-vs-debugger.529863/

 

 

[출처] https://puzi.tistory.com/19

 

[비주얼 스튜디오] 디버그를 위해 Unity에 Attach할 시 Freeze현상

플랫폼 대응을 위해 유니티 버전을 2018.3.5f1에서 2018.4.2f1로 버전업을 하였는데 그 뒤로 비주얼스튜디오를 유니티에 붙이면 멈춤 현상이 일어났다. 당연히 브레이크 포인트에 걸리지 않은 상태였고 Attach를..

puzi.tistory.com

 

반응형
Posted by blueasa
, |

Error:Cannot fit requested classes in a single dex file.Try supplying a main-dex list. # methods: 72477 > 65536

 

안드로이드 빌드할 때 위와 같은 에러가 발생한다면?

 

minSdkVersion 이 21 이상인 경우

build.gradle 파일에서 multiDexEnable  true로 설정하면 됩니다.

android {
    defaultConfig
{
       
...
        minSdkVersion
21
        targetSdkVersion
26
       
multiDexEnabled true
   
}
   
...
}

 

minSdkVersion 이 20 이하인 경우

build.gradle 파일에서 multiDexEnable 을 true로 설정하고 multidex 지원 라이브러리를 추가해야 합니다. 

그리고 custom application을 사용하지 않는다면 MultiDexApplication을 추가해야 합니다.

android {
    defaultConfig
{
       
...
        minSdkVersion
15
        targetSdkVersion
26
       
multiDexEnabled true
   
}
   
...
}

dependencies
{
 
compile 'com.android.support:multidex:1.0.3'
}

<application
android:name="android.support.multidex.MultiDexApplication"
...>
...
</application>

 

 

 

왜 이런 에러가 발생하는가?

 

APK 파일에는 DEX(Dalvik Executable) 파일 형식의 실행 가능한 바이트코드 파일이 포함됩니다.

단일 DEX 파일 내에서 참조할 수 있는 메서드의 총 개수를 65,636으로 제한하며 이 DEX 파일에는 프레임워크 메서드, 라이브러리 메서드, 본인 앱에서 정의한 메서드가 모두 포함됩니다. 즉 앱 내의 모든 메서드가 65,536개를 넘어서 이러한 에러가 발생한 것입니다. 64 * 1024의 값과 동일하며 이 제한을 64K 참조 제한이라고 합니다.

 

안드로이드 L  (롤리팝, 5.0  API 21 ) 미만의 플랫폼 버전에서는 앱 코드 실행을 위해 Dalvik 런타임을 사용합니다. APK당 하나의 classes.dex 바이트코드 파일로 앱을 제한합니다. 이러한 제한을 해결하기 위해 multidex 지원 라이브러리를 사용할 수 있습니다. 

안드로이드 L (롤리팝 5.0 API 21) 이상에서는 Dalvik이 아닌 ART (Android Runtime)이라는 런타임을 사용합니다. 이 런타임은 APK 파일로부터 여러 개의 DEX 파일을 로드하는 것을 지원합니다. ART는 앱 설치 시에 사전 컴파일 수행하여 classesN.dex 파일들을 스캔하고, 안드로이드 기기가 실행할 수 있도록 .oat 파일로 컴파일 합니다.

그래서 minSdkVersion 21이상이라면 multidex 지원 라이브러리가 필요없습니다. build.gradle에 간단하게 multiDexEnabled true 만 추가하면 됩니다.

 

 

multidex 속도가 느린 이유?

각 DEX 파일들을 빌드할 때 빌드 툴(buildToolsVersion)은 주 DEX 파일에 어떤 클래스들을 포함할지 고르는 아주 복잡한 의사결정을 수행하게 됩니다. 이러한 과정이 없다면 앱 실행에 필요한 클래스들이 주 DEX에 포함되어있지않아 Crash가 나기때문입니다. 그래서 이러한 과정을 거치게되는데 시간이 상당히 오래걸립니다. 

 

 

네이티브 코드가 주 dex에 포함이 안되는 경우?

네이티브 코드를 사용하는 라이브러리를 포함한다고 생각해 봅시다.  그 라이브러리에서 네이티브(JNI) 코드를 사용하게되면 의사결정 과정에서 라이브러리가 구동되기위해 필요한 클래스들이 주 DEX 파일에 포함되지 않을 수 있습니다. 그럴 경우에는 multiDexKeepFile, multiDexKeepProguard 를 사용해서 주 DEX에 포함시키도록 해야합니다.

 

 

빌드 최적화

위에도 써놨듯이 multidex는 복잡한 의사결정을 수행하면서 빌드 시간이 상당히 커질 수 밖에 없습니다. 빌드 시간을 줄이기 위해서 빌드 사이에 multidex를 재사용하는 pre-dexing을 사용할 수도 있습니다. 하지만 Android 5.0 롤리팝 이상인 ART 환경에서만 가능합니다.

Android Studio 2.3 이상인 경우는 IDE에서 자동으로 pre-dexing을 사용하기 때문에 별도로 작성할 것은 없습니다. android studio gradle plugin은 최신버전으로 업데이트하면 빌드 속도를 최적화하는 기능들이 추가적으로 들어있기 때문에 항상 최신버전으로 유지하는 것이 좋습니다.

 

 

multidex의 알려진 문제들.

- 단말기에 DEX 파일들을 설치할 때, 두번째 DEX 파일이 클 경우에 ANR(Android Not Responding)이 발생할 수 있습니다. 이를 막기 위해서 ProGuard 에서 코드 축소(Code Shrinking)을 해야 합니다.

- Android 5.0 롤리팝 미만에서 실행할 경우 linearalloc limit (issue 78035) 이슈를 완전히 막을 수 없습니다.



출처: https://duzi077.tistory.com/198 [개발하는 두더지]

 

Android Cannot fit requested classes in a single dex file. 해결 방법 - 190124 업데이트

Error:Cannot fit requested classes in a single dex file.Try supplying a main-dex list. # methods: 72477 > 65536 안드로이드 빌드할 때 위와 같은 에러가 발생한다면? minSdkVersion 이 21 이상인 경우 buil..

duzi077.tistory.com

 

반응형
Posted by blueasa
, |

[에러메시지]

DllNotFoundException: FirebaseCppApp-6_9_0
Firebase.AppUtilPINVOKE+SWIGExceptionHelper..cctor () (at Z:/tmp/tmp.G7nHbBPBcF/firebase/app/client/unity/proxy/AppUtilPINVOKE.cs:117)

....(하략)....

 

 

유니티에서 플러그인을 어느 플랫폼에 사용할 지 셋팅하는 인스펙터 창에 보이는 'Any Platform'이 신뢰하기 힘든 동작을 하는 것 같다.

이 번에 한바탕 한 플러그인은 FirebaseCppApp-6_9_0이다.

아래와 같이 'Any Platform'을 체크하고, 내 자리에서 제대로 동작하는 걸 확인하고 Commit을 했는데 다른 자리에서 제대로 인식을 하지 못한다.

 

Any Platform 체크

 

그래서 'Any Platform'을 해제하고 개별적으로 모두 체크하니 제대로 동작한다.

개별적으로 Platform 모두 체크

 

'Any Platform' 체크를 사용하지 말아야겠다.

반응형
Posted by blueasa
, |