예전에 빌드 했던 앱을 열어서 Nuget 을 모두 업데이트 했는데 

아래 처럼 에러가 발생되었다.



unable to get provider com.google.android.gms.ads.mobileadsinitprovider: java.lang.illegalstateexception


해결방법은 AndroidManifest.xml 파일에

아래처럼 AdMob 에서 할당된 앱의 고유 ID 를 넣으면 해결된다.


<application android:label="UnitConversion" android:icon="@drawable/module48">

    <meta-data

        android:name="com.google.android.gms.ads.APPLICATION_ID"

        android:value="ca-app-pub-4681470946279796~5708961527"/>

</application>


앱의 ID 는 AdMob 사이트에서 아래 처럼 확인 할 수 있다.


이전에는 저 항목이 없어도 광고 표시에 문제가 없었는데 버전업이 되면서 필수 항목으로 바뀐듯하다.



Visual Studio 를 이용해 ipa 파일을 생성하고 Application Loader 를 이용해 

ipa 파일을 업로드 하려는데... 아무리 찾아도 보이지 않아 확인해보니

xcode 11 버전 부터 Application Loader 를 지원하지 않는다고 한다..

(맥미니를 새로 구입하면서.. 이런상황이...)


1. 앱 암호를 생성해야한다.

https://appleid.apple.com/account/manage

위 사이트로 들어가 로그인하고 보안 섹션의 앱암호 에서 암호 생성을 하고 기억한다.

(참고로 암호는 내가 지정하는것이 아니라 내가 특정 단어를 입력하면 단어 기준으로 암호가 만들어진다.)


2. 터미널을 실행히야 엡을 업로드 한다.

유틸리티에서 터미널을 실행하고


아래 명령어를 실행한다.

(바탕화면에 ipa 파일이 있다는 가정이다.)

xcrun altool --upload-app --type ios --file "Desktop/kjun.iOS.ipa" --username "ios 계정(메일)" --password "앱암호"


아래처럼 업로드 완료



  1. 사파리 앱으로 http://get.udid.io/ 에 들어갑니다.

  2. 녹색 버튼인 "Tap to find UDID" 를 클릭하시면 "Get Your UDID" 프로파일이 다운로드 되고 설정에 들어가서 프로파일을 설치합니다. 설치하시면 자동으로 해당 사이트로 방문하며 UDID 정보가 나옵니다.


Xamarin Forms 의 Picker 에서 SelectedIndexChanged 이벤트를 걸어 놓으면

Android 는 확인 버튼을 클릭했을때 동작하는데

iOS 는 Done 을 선택하기전 값을 바꾸는 와중에 SelectedIndexChanged 이벤트가 발생했다.

이를 막고 Done 버튼을 클릭(선택완료 시) SelectedIndexChanged 이벤트를 타게 하려면 아래와 같이 코딩해야한다.

 

using Xamarin.Forms.PlatformConfiguration;

using Xamarin.Forms.PlatformConfiguration.iOSSpecific;

 

this.picker.On<iOS>().SetUpdateMode(UpdateMode.WhenFinished);

기존에 사용했던 코드가

public static readonly BindableProperty SpacingProperty =

    BindableProperty.Create<WrapLayout, double>(w => w.Spacing, 5,

        propertyChanged: (bindable, oldvalue, newvalue) => ((WrapLayout)bindable).layoutCache.Clear());

 

아래처럼 줄이 그어져 확인해보니


"Create<> (generic) is obsolete as of version 2.1.0 and is no longer supported."

 

위 문구 처럼 Create<> 는 더 이상 지원하지 않는다고한다.

 

위 내용을 지원되는 현재 버전으로 변경하면 아래와 같다.

 

public static readonly BindableProperty SpacingProperty =

    BindableProperty.Create(nameof(Spacing), typeof(double), typeof(WrapLayout), 5.0,

        propertyChanged: (bindable, oldValue, newValue) => ((WrapLayout)bindable).layoutCache.Clear());

 

 

참고

https://forums.xamarin.com/discussion/comment/177726/#Comment_177726

https://forums.xamarin.com/discussion/62984/generic-versions-of-create-are-no-longer-supported-and-deprecated

 

 

BindableProperty.Create<BindablePicker, IList>(p => p.ItemsSource, null,

    propertyChanged: OnItemsSourcePropertyChanged);

=>

BindableProperty.Create(nameof(ItemsSource), typeof(IList), typeof(BindablePicker), null,

    propertyChanged: OnItemsSourcePropertyChanged);

 

 

private static void OnItemsSourcePropertyChanged(BindableObject bindable, IList oldValue, IList newValue)

=>

private static void OnItemsSourcePropertyChanged(BindableObject bindable, object oldValue, object newValue)

 

 

앱을 등록하면 아래와 같이 64 비트 요구사항을 준수하지 않는다는 문구가 뜬다.

 

이를 위해선 프로젝트 속성의 Android 옵션 에서 고급 버튼을 클릭하고

'지원되는 아키텍처'의 arm64-v8a 를 체크하고 빌드하면 된다.

 

 

참고

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

웹뷰에 특정 사이트를 나타내도록 했는데

아래 처럼 에러가 발생되었다.

 

 

ERR_CLEARTEXT_NOT_PERMITTED 로 찾아보니 https 가 아닌 주소인 경우 위처럼 에러가 발생될수 있다고 한다.

위 에러 해결을 위해선 Android 프로젝트의 AndroidManifest.xml 파일의 application  에 아래와 같이

android:usesCleartextTraffic="true" 값을 넣어주면 된다.

 

앞서 만들어진 프로비전 프로필을 프로젝트에 적용하는 방법입니다.

(윈도우에서 처리하는 방법입니다.)

 

iOS 프로젝트 속성의 iOS 번들 서명에서 앞서 등록했던 프로비전 프로필이 목록에 나타나지 않습니다.

 

이를 나타내기 위해선 Visual Studio 의 도구 > 옵션을 클릭

 

Xamarin > Apple Account 를 클릭합니다.

 

 

여기에서 유의사항은 이때 Mac 에 비번을 입력해야합니다.

항상 허용을 하면 다음부터 물어보지 않습니다.

(가끔 비쥬얼 스튜디오가 반응이 없을땐 Mac 을 확인해주세요. 항상허용을 하더라도 물어볼때도 있음.)

 

전 2단계 인증을 해서 2단계인증 코드를 입력합니다.

 

연결이되면 아래처럼 좀전에 추가했던 프로비저닝 프로필이 목록에 있는걸 확인 할수 있습니다.

(만약 목록에 보이지 않는다면 '모든 프로필 다운로드' 버튼을 클릭하면 됩니다.)

 

닫고 iOS 프로젝트 속성의 iOS 매니패스트로 가서

번들 식별자를 이전에 AppID 등록때 사용했던 kr.kjun.appID(예시) 로 번들 식별자를 변경합니다.

 

이제 번들 서명으로 가면 아래 처럼 프로비전 프로필에 등록했던 프로비전 프로필이 목록에 나타납니다.