Xamarin.iOS 9-문제 해결Xamarin.iOS 9 – Troubleshooting

이 문서에서는 Xamarin.iOS 앱에 있는 iOS 9 사용 하 여 작업에 대 한 몇 가지 문제 해결 팁을 제공 합니다.This article provides several troubleshooting tips for working with iOS 9 in Xamarin.iOS apps.

XML을 구문 분석 문제가 발생 했습니다.There was a problem parsing the XML

Xamarin iOS 디자이너 Xcode 7 기능을 아직 지원 하지 않습니다.The Xamarin iOS Designer does not yet support Xcode 7 features. 스토리 보드 디자이너에서 로드 되지 것입니다 "XML을 구문 분석 문제가 발생 했습니다." 새 iOS 9 (Xcode 7)를 사용 하려고 하면 StackView 같은 디자이너 요소입니다.Storyboards will fail to load in designer with "There was a problem parsing the XML" when attempting to use new iOS 9 (Xcode 7) designer elements such as StackView.

iOS Xcode 7 기능에 대 한 디자이너 지원을 곧 주기 6 기능 출시 대상으로 합니다.iOS Designer support for Xcode 7 features is targeted for the upcoming Cycle 6 feature release. 주기 6 미리 보기 버전 알파 채널에서 현재 사용 가능한 및 제한적으로 새 Xcode 7 기능에 대 한 지원.The preview version of Cycle 6 is currently available in the Alpha channel and has limited support for the new Xcode 7 features.

Mac 용 Visual Studio에 대 한 부분 해결 방법: 스토리 보드를 마우스 오른쪽 단추로 클릭 하 고 선택 연결 프로그램 > Xcode Interface Builder합니다.Partial workaround for Visual Studio for Mac: Right-click the storyboard and choose Open With > Xcode Interface Builder.

여기서? iOS 8 시뮬레이터Where are the iOS 8 Simulators?

Xcode 7 (또는 그 이상)을 자동으로 설치한 경우 모든 iOS 8 시뮬레이터 9 iOS 시뮬레이터를 사용 하 여 기본적으로 바꾸어야 합니다.If you have installed Xcode 7 (or greater) it will automatically replace all of the iOS 8 simulators with iOS 9 simulators by default. IOS 8에서 테스트 해야 하는 경우 Xcode를 시작 하 고 다운로드 하 고, iOS 8 시뮬레이터를 설치할 수 있습니다.If you still need to test on iOS 8, you can start Xcode, then download and install the iOS 8 simulators.

Xcode에서 선택 합니다 Xcode 한 다음 메뉴 기본 설정... > 다운로드:In Xcode, select the Xcode menu then Preferences... > Downloads:

클릭 합니다 확인 하 고 지금 설치 단추는 iOS 8 시뮬레이터를 다시 설치 합니다.Click the Check and Install Now button to reinstall the iOS 8 simulators.

왼쪽/오른쪽 특성 오류를 사용 하 여 레이아웃 제약 조건Layout Constraint with Left/Right Attribute Errors

IOS 8 (및 이전 버전), 스토리 보드에서 UI 요소 사용 하 여 두 가지 조합 오른쪽 & 왼쪽 특성 (NSLayoutAttributeRight & NSLayoutAttributeLeft) 및 선행 & 후행 특성 (NSLayoutAttributeLeading & NSLayoutAttributeTrailing) 고 같은 레이아웃.In iOS 8 (and prior), UI elements in Storyboards could use a mix of both Right & Left Attributes (NSLayoutAttributeRight & NSLayoutAttributeLeft) and Leading & Trailing Attributes (NSLayoutAttributeLeading & NSLayoutAttributeTrailing) in the same layout.

동일한 스토리 보드에서 iOS 9에서 실행 하는 경우 다음 형식의 예외 발생:If the same Storyboard in run in iOS 9, it will result in an exception in the following form:

앱 'NSInvalidArgumentException' 확인할 수 없는 예외로 인해 종료 이유: ' * * * + [NSLayoutConstraint constraintWithItem:attribute:relatedBy:toItem:attribute:multiplier:constant:]: 선행/후행 특성 및 오른쪽/왼쪽 특성 간의 제약 조건을 만들 수 없습니다.Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '*** +[NSLayoutConstraint constraintWithItem:attribute:relatedBy:toItem:attribute:multiplier:constant:]: A constraint cannot be made between a leading/trailing attribute and a right/left attribute. 둘 다 또는 둘 다에 대 한 선행/후행 사용 합니다.'Use leading/trailing for both or neither.'

iOS 9를 사용 하 여 레이아웃 적용 오른쪽 & 왼쪽 하거나 선행 & 후행 특성이 있지만 하지 둘 다.iOS 9 enforces layouts to use either Right & Left or Leading & Trailing attributes but not both. 이 문제를 해결 하려면 스토리 보드 파일 내에서 설정 된 동일한 특성을 사용 하는 모든 레이아웃 제약 조건을 변경 합니다.To fix this issue, change all layout constraints to use the same attribute set inside your Storyboard file.

자세한 내용은 참조 하십시오 합니다 iOS 9 제약 조건 오류가 스택 오버플로 토론 합니다.For more information, please see the iOS 9 constraint error Stack Overflow discussion.

ERROR ITMS-90535: 예기치 않은 CFBundleExecutable 키ERROR ITMS-90535: Unexpected CFBundleExecutable Key

IOS 9 전환한 후 앱에서 타사 구성 요소 (특히 기존 Google Maps 구성 요소)에 컴파일하고 새 빌드를 iTunes Connect 양식에서 오류가 발생할 수 있습니다를 제출 하려고 할 때 iOS 8 (또는 이전)에서 실행을 사용 합니다.After switching to iOS 9, from an app uses 3rd party components (specifically our existing Google Maps component) that compiled and ran on iOS 8 (or earlier), when trying to submit the new build to iTunes Connect you can get an error in the form:

ERROR ITMS-90535: 예기치 않은 CFBundleExecutable 키입니다.ERROR ITMS-90535: Unexpected CFBundleExecutable Key. 'Payload/app-name.app/component.bundle'에서 번들에는 실행 파일을 번들 없습니다...The bundle at 'Payload/app-name.app/component.bundle' does not contain a bundle executable...

이 문제 수 일반적으로 프로젝트의 명명 된 번들을 검색 하 여 해결 후 다시 설치 해야-바로 알 수 있듯이 오류 메시지-편집 합니다 Info.plist 제거 하 여 번들에는 CFBundleExecutable 키입니다.This issues can usually be solved by finding the named bundle in the project then - just as the error message suggests - edited the Info.plist that is in the bundle by removing the CFBundleExecutable key. 합니다 CFBundlePackageType 키로 설정 해야 BNDL 도 합니다.The CFBundlePackageType key should be set to BNDL as well.

다음과 같이 변경한 후 정리를 수행 하 고 전체 프로젝트를 다시 빌드하십시오.After making these changes, do a clean and rebuild the entire project. 이러한 변경을 수행한 후 문제 없이 iTunes Connect에 전송할 수 있어야 합니다.You should be able to submit to iTunes Connect without issue after making these changes.

자세한 내용은 참조 하십시오이 Stack Overflow 토론 합니다.For more information, please see this Stack Overflow discussion.

CFNetwork SSLHandshake 실패 (-9824) 오류CFNetwork SSLHandshake failed (-9824) Error

직접 또는 ios 9 웹 보기에서 인터넷에 연결을 시도할 때 오류가 발생할 수 있습니다는 형식:When attempting to connect to the internet, either directly or from a web view in iOS 9, you might get an error in the form:

2015-09-04 14:38:05.757 FormsWebViewiOS[2553:30362] CFNetwork SSLHandshake failed (-9824)
2015-09-04 14:38:05.758 FormsWebViewiOS[2553:30363] NSURLSession/NSURLConnection HTTP load failed (kCFStreamErrorDomainSSL, -9824)

또는 형식에서:Or in the form:

2015-09-04 14:39:17.881 FormsWebViewiOS[2568:30974] App Transport Security has blocked a cleartext HTTP (http://) resource load since it is insecure.
Temporary exceptions can be configured via your app's Info.plist file.

IOS9, 앱 전송 보안 ATS ()는 인터넷 리소스 (예: 앱의 백 엔드 서버)와 앱 간에 보안 연결을 적용합니다.In iOS9, App Transport Security (ATS) enforces secure connections between internet resources (such as the app's back-end server) and your app. 또한 ATS 필요 사용 하 여 통신을 HTTPS 프로토콜 및 전달 완전 보안을 사용 하 여 TLS 버전 1.2 사용 하 여 암호화 될 높은 수준의 API 통신 합니다.Additionally, ATS requires communication using the HTTPS protocol and high-level API communication to be encrypted using TLS version 1.2 with forward secrecy.

ATS는 모든 연결을 사용 하 여 iOS 9 및 OS X 10.11 (El Capitan) 용으로 빌드된 앱에서 기본적으로 활성화 되어 있으므로 NSURLConnection하십시오 CFURL 또는 NSURLSession ATS 보안 요구 사항이 적용 됩니다.Since ATS is enabled by default in apps built for iOS 9 and OS X 10.11 (El Capitan), all connections using NSURLConnection, CFURL or NSURLSession will be subject to ATS security requirements. 연결에 이러한 요구 사항에 맞지 않는 경우 예외가 발생 하 여 실패 합니다.If your connections do not meet these requirement, they will fail with an exception.

참조 하세요 합니다 Opting 옵트아웃 ATS 섹션의 우리의 앱 전송 보안 이 문제를 해결 하는 방법에 대 한 정보에 대 한 가이드입니다.Please see the Opting-Out of ATS section of our App Transport Security guide for information on how to solve this issue.

내 기존 앱은 iOS 9에서 실행 하지 마세요My existing apps don't run on iOS 9

참조 우리의 iOS 9 호환성 정보 iOS 9에서 실행을 다시 빌드하고 다시 배포 하는 기존 앱에 대 한 지침에 대 한 합니다.See our iOS 9 compatibility information for instructions on re-building and re-deploying your existing apps to run on iOS 9.

UICollectionViewCell.ContentView가 Null 생성자UICollectionViewCell.ContentView is Null in Constructors

원인: Ios 9 initWithFrame: 생성자는 이제 iOS 9로의 동작 변경 내용으로 인해 필요한 합니다 UICollectionView 설명서에 나와합니다.Reason: In iOS 9 the initWithFrame: constructor is now required, due to behavior changes in iOS 9 as the UICollectionView documentation states. 셀을 호출 하 여 초기화 됩니다 지정된 된 식별자에 대 한 클래스를 등록 하 고 새 셀을 만들어야 하는 경우 해당 initWithFrame: 메서드.If you registered a class for the specified identifier and a new cell must be created, the cell is now initialized by calling its initWithFrame: method.

해결 방법: 추가 된 initWithFrame: 다음과 같은 생성자:Fix: Add the initWithFrame: constructor like this:

[Export ("initWithFrame:")]
public YourCellClassName (CGRect frame) : base (frame)
{
    Initialize (); // refactor initialize code into a method
}

관련된 샘플: MotionGraph, TextKitDemoRelated samples: MotionGraph, TextKitDemo

UIView는 Xib/Nib에서 뷰를 로드할 때 코드 작성자를 사용 하 여 초기화 하지 못함UIView fails to Init with Coder when Loading a View from a Xib/Nib

원인: initWithCoder: 생성자 인터페이스 작성기 Xib 파일에서 뷰를 로드할 때 호출 됩니다.Reason: The initWithCoder: constructor is the one called when loading a view from an Interface Builder Xib file. 이 생성자는 내보내지지 않음 경우 비관리 코드는 관리 되는 버전을 호출할 수 없습니다.If this constructor is not exported unmanaged code can’t call our managed version of it. 이전에 (예:Previously (eg. iOS 8)에 IntPtr 뷰를 초기화 하려면 생성자 호출 되었습니다.in iOS 8) the IntPtr constructor was invoked to initialize view.

해결 방법: 만들기 및 내보내기는 initWithCoder: 다음과 같은 생성자:Fix: Create and export the initWithCoder: constructor like this:

[Export ("initWithCoder:")]
public YourClassName (NSCoder coder) : base (coder)
{
    Initialize (); // refactor initialize code into a method
}

관련된 샘플: ChatRelated sample: Chat

Dyld 메시지: 이름의 캐시 이미지 없음...Dyld Message: No Cache Image with Name...

로그에서 다음 정보를 사용 하 여 충돌을 발생할 수 있습니다.You might experience a crash with the following information in the log:

Dyld Error Message:
Dyld Message: no cach image with name (/System/Library/PrivateFrameworks/JavaScriptCore.framework/JavaScriptCore)

원인: 개인 프레임 워크를 활용 하며 공개 하는 경우 발생 하는 Apple 네이티브 링커가의 버그입니다 (JavaScriptCore 수행 된 iOS 7에서에서 공개 하기 전에 개인 프레임 워크 였습니다) 및 프레임 워크 개인 때 앱의 배포 대상은 iOS 버전입니다.Reason: This is a bug in Apple's native linker, which happens when they make a private framework public (JavaScriptCore was made public in iOS 7, before that it was a private framework), and the deployment target of the app is for an iOS version when the framework was private. 이 경우 Apple의 링커는 공용 버전 대신 프레임 워크의 전용 버전을 사용 하 여 연결 됩니다.In this case Apple's linker will link with the private version of the framework instead of the public version.

해결 방법: IOS 9에 대 한 해결 될 것 이지만 그 동안에 직접 적용할 수 있습니다 문제를 쉽게 해결: 방금 이상 (보십시오 iOS 7이 예제의) 프로젝트에서 iOS 버전을 대상입니다.Fix: This will be addressed for iOS 9, but there is an easy workaround you can apply yourself in the meantime: just target a later iOS version in your project (you can try iOS 7 in this case). 다른 프레임 워크와 비슷한 문제가 발생할 수 있습니다, 예를 들어 WebKit framework iOS 8에서에서 공용으로 설정 되었습니다 (및 iOS 앱에서 WebKit를 사용 하는 8을 두어야 이므로이 오류를 발생 하면 iOS 7을 대상으로).Other frameworks might exhibit similar problems, for example the WebKit framework was made public in iOS 8 (and so targeting iOS 7 will result in this error; you should target iOS 8 to use WebKit in your app).

신뢰할 수 없는 엔터프라이즈 개발자Untrusted Enterprise Developer

실제 iOS 하드웨어에서 Xamarin.iOS 앱의 iOS 9 버전을 실행 하려고 시도할 때, 개발자 계정의 장치에서 신뢰할 수 있는 메시지가 표시 될 수 있습니다.When attempting to run the iOS 9 version of your Xamarin.iOS app on real iOS hardware, you might get a message saying that your developer account has not been trusted on the device. 예를 들어:For example:

이 문제를 해결 하려면 다음을 수행 합니다.To solve this issue, do the following:

  1. Xcode (최신 베타 버전) Mac. 개발 시작Start Xcode (the latest beta version) on the development Mac.

  2. 선택 장치 에서 합니다 장치 창을 열려면 메뉴:Select Devices from the Window menu to open the Devices Window:

  3. 아래는 장치 패널 쪽에서 사용자 장치를 마우스 오른쪽 단추로 클릭 하 여 선택 프로 비전 프로필을 표시 하는 중... :Under the DEVICES side panel, select your device, right-click and select Show Provisioning Profiles...:

  4. 장치 및 클릭에서 현재 각 프로 비전 프로필을 선택 합니다 - 삭제 하는 단추:Select each provisioning profile currently on the device and click the - button to delete it:

  5. Xcode 메뉴에서 기본 설정... 하 고 계정:From the Xcode menu, select Preferences... and Accounts:

  6. 클릭 된 세부 정보를 확인 하는 중... 단추를 클릭 합니다 모든 다운로드 단추:Click the View Details... button, then click the Download all button:

  7. 목록 업데이트 완료 되 면 클릭 합니다 수행 단추 및 기본 설정 창을 닫습니다.When the list has finished updating, click the Done button and close the Preferences window.

  8. IOS 장치에서 테스트 하려는 Xamarin.iOS 앱의 기존 버전을 제거 합니다.Remove the existing version of the Xamarin.iOS app that you were trying to test from the iOS device.

  9. Mac 용 Visual Studio로 돌아가서, 클린 빌드를 수행 및 장치에서 앱을 다시 실행 하려고 합니다.Return to Visual Studio for Mac, do a clean build and try to re-run the app on the device.

중지 하 고 Xcode에서 로드 하는 새 프로 비전 프로필은 표시 하려면 먼저 Mac 용 Visual Studio를 다시 시작 해야 합니다.You might have to stop and restart Visual Studio for Mac before the new provisioning profiles loaded by Xcode are seen. 조정 해야 할 수도 있습니다는 iOS 번들 서명 새 프로 비전 프로필을 선택 하 여 Xamarin.iOS 앱에 대 한 옵션입니다.You might also have to adjust the iOS Bundle Signing options for your Xamarin.iOS app to select the new provisioning profiles.

시작 화면 문제Launch Screen Issues

iOS 9가 다른 인터페이스 방향을 지원 하기 위해 더 이상 동일한 시작 이미지를 다시 사용할 수 있도록에 이제 시작 화면 요구 사항을 적용 합니다.iOS 9 now enforces the Launch Screen requirements so that the same launch image can no longer be reused to support different interface orientations. Apple의를 참조 하세요 UILanchImage 참조 자세한 내용은 합니다.See Apple's UILanchImage Reference for more information.

필요에 따라 집합이 아닌 앱의 시작 화면을 표시 하는 스토리 보드 파일을 사용할 수 있습니다 .png 이미지 파일입니다.Optionally, you can use a storyboard file to present your app's Launch Screen as opposed to using a set of .png image files. 이제 Apple의 시작 화면을 제공 하는 방식으로 기본 설정입니다.This is now Apple's preferred way to present Launch Screens. 참조 하십시오 우리의 통합 스토리 보드 소개 자세한 가이드입니다.Please see our Introduction to Unified Storyboards guide for more information.

마지막으로 앱 시작 화면에 스토리 보드 파일을 사용 하 고 모든 네 가지 인터페이스 방향 (세로, 거꾸로 세로, 가로 왼쪽 및 오른쪽 가로)이 슬라이드를 통해 패널에 또는 분할 보기 모드에서 실행 중인 것으로 간주 지원 해야 합니다.Finally, your app must use a storyboard file for its Launch Screen and support all four interface orientations (Portrait, Upside-down Portrait, Landscape Left and Landscape Right) to be considered for running in a Slide Over panel or in Split View mode. IOS 9의 새로운 멀티태스킹 기능에 대 한 자세한 내용을 알아보려면, 하세요 우리의 iPad 용 멀티태스킹 가이드입니다.To find out more about the new multitasking abilities of iOS 9, please see our Multitasking for iPad guide.

NSInternalInconsistencyException 예외NSInternalInconsistencyException Exception

컴파일 및 iOS 9에 대 한 기존 Xamarin.iOS 앱을 실행 하는 경우 오류가 발생할 수 있습니다는 형식:When compiling and running an existing Xamarin.iOS app for iOS 9 you might get an error in the form:

Objective C 예외를 throw 됩니다.Objective-C exception thrown. 이름: NSInternalInconsistencyException 이유: Windows 응용 프로그램 루트 보기 컨트롤러 응용 프로그램의 끝에서 시작 해야Name: NSInternalInconsistencyException Reason: Application windows are expected to have a root view controller at the end of application launch

이 오류는 앱 Windows 응용 프로그램 시작 후에 루트 뷰 컨트롤러를 해야 하 고 기존 앱 하지 때문에 발생 합니다.This is error is being raised because app Windows are expected to have a Root View Controller at the end of application launch and your existing app doesn't.

이 문제를 해결할 수 있는 최소 두 가지가 있습니다.There are at least two possible workarounds for this problem:

  1. 대신 스토리 보드 파일을 사용 하도록 앱 업데이트 xib 파일을 해당 사용자 인터페이스를 정의 합니다.Update app to use storyboard file instead of xib files to define its User Interface. 이 상당히 많은 시간에 따라 앱의 크기와 iOS 디자이너 (또는 Xcode의 Interface Builder)를 사용 하는 방법에 대 한 지식이 스토리 보드 레이아웃에 필요 합니다.This one requires quite a lot of time depending on size of your app and knowledge of how to use the iOS Designer (or Xcode's Interface Builder) to layout storyboards. 자세한 내용은 참조 하세요. 당사의 통합 스토리 보드 소개 설명서.For more information, see our Introduction to Unified Storyboards documentation.
  2. 설치 프로그램 RootViewController 앱 창의 속성에서 FinishedLaunching 에서 메서드 AppDelegate 앱 UI에서 뷰 컨트롤러를 가리키도록 클래스입니다.Setup RootViewController property of app Window in FinishedLaunching method in AppDelegate class to point to a View Controller in your app's UI.

뷰와 뷰 컨트롤러를 초기화 하는 경우When to Initialize Views and View Controllers

Xamarin.iOS를 사용 하 여 관리 코드에 노출 되는 것 이지만 iOS 디자인 중단 될 때 호출 되는 생성자 내부 보기 또는 뷰 컨트롤러 초기화를 확인 하는 것이 같습니다.With Xamarin.iOS it’s possible to make View or View Controller initialization inside constructors which are called when something is exposed into managed code but it breaks iOS design.

일반적 하지 초기화 해야 호출할 수 있는 다시 Objective-c 코드를 생성자에서 확인할 수 있으므로 모든 호출 하면 됩니다.In general you should not initialize anything that can call back Objective-C code from the constructor since you can't be sure when it will be called. 또한 즉는 더 나은 위치 (.ctor 다른) 또는 재정의 (Objective-c에 이벤트가 없습니다)에 대 한 호출이이 초기화 해야 합니다.That also means there's a better places (other .ctor) or calls to override (as Objective-C has no events) where this initialization should be done.