Xamarin.iOS 테스트 및 배포 - 문제 해결Xamarin.iOS Testing and Deployment - Troubleshooting

코드 서명 및 프로비전Code Signing & Provisioning

iOS를 통한 코드 서명 및 프로비전은 매우 어려울 수 있으므로 코드 서명 인증서 및 프로비전 프로필이 순서대로 있는지 확인해야 합니다.Code Signing & Provisioning with iOS can be quite awkward, and so it is important to make sure that the code signing certificates and provisioning profiles are in order.

  • 대규모 팀은 가능한 한 Xcode에서 다음과 같은 "문제 해결" 단추를 사용하지 않아야 합니다.Large teams should refrain from using the "Fix issue" button in Xcode, illustrated here:

    그러면 새 프로비전 프로필과 인증서가 만들어집니다.This will create new provisioning profiles and certificates. 이렇게 하면 팀 구성원이 프로비전 프로필을 클릭할 때마다 해당 프로필을 만들어 프로필의 순서가 혼란스럽게 될 수 있습니다.At best this will create a provisioning profile every time a team member clicks it, causing disorganization with profiles. 최악의 경우 회사의 다른 모든 사용자에 대한 인증서를 철회하여 앱의 작동이 중지됩니다.At worst, it will revoke certificates for everyone else in the company, causing their apps to stop working.

  • 키 집합 액세스를 체계적으로 유지하고, 만료된 인증서 및 프로필은 삭제합니다.Keep Keychain Access organized and delete expired certificates and profiles. 엔터프라이즈 인증서는 3년 동안 지속되지만, 다른 인증서는 1년 동안만 지속됩니다.Enterprise certificates last for three years, while others last only a year. 인증서는 갱신할 수 없으므로 이전 인증서가 만료되기 직전에 새 인증서를 만들어야 합니다.Certificates cannot be renewed, so it will be necessary to create new certificates just before the old ones expire. 이전 인증서를 철회 및 삭제하고 새 인증서로 앱에 다시 서명해야 합니다.Make sure to revoke and delete old certificates, and re-sign apps with new certificates.

  • 새 프로비전 프로필이 설치되면 이전 프로비전 프로필을 제거합니다.Remove the old provisioning profiles as the new ones are installed. 즉 Mac용 Visual Studio는 사용할 프로필을 결정할 수 없습니다.This means that Visual Studio for Mac is not in a position where it has to decide which profile to use. 이렇게 하려면 먼저 Apple Developer Center에서 프로필을 삭제한 다음, 기본 설정 > 계정 > 자세히 보기... 로 차례로 이동합니다. 프로비전 프로필을 선택하고 Finder에 표시를 클릭합니다.To achieve this, first make sure to delete the profile in the Apple developer center, and then browse to Preferences > Your Account > View Details.... Select the provisioning profile and click Show in Finder. 그러면 Mac 파일 시스템에서 프로필의 위치가 표시되며 Finder를 사용하여 삭제할 수 있습니다.This will reveal the location of the profile in the Mac file system, where it can then be deleted using Finder.

  • 필요한 모든 인증서와 해당 개인 키를 사용할 수 있는지 확인합니다.Ensure that all the required certificates and the corresponding private keys are available. 각 팀마다 개발자 인증서(자체 디바이스에 앱을 설치함)와 배포 인증서(다른 디바이스에 설치함)가 필요합니다.For each team will need a developer certificate (to install apps on a own device), and a distribution certificate (to install on other devices)

  • 새 프로비전 프로필 또는 인증서가 설치되면 Mac/Visual Studio용 Xcode와 Visual Studio를 다시 시작합니다.Relaunch Xcode and Visual Studio for Mac / Visual Studio when a new Provisioning Profile or Certificate is installed.

TestFlightTestFlight

테스트가 계획대로 원활하게 수행되지 않는 경우도 있습니다.Sometimes, testing doesn’t go quite as smoothly as planned. 다음 단계는 TestFlight와 관련된 문제를 해결하는 데 도움이 될 수 있습니다.The following steps can help with resolve issues with TestFlight:

  • TestFlight는 iOS 8 이상을 대상으로 하는 앱에서만 사용할 수 있습니다.TestFlight is only available for apps targeting iOS 8 and above.

  • 베타 자격이 있는 앱 스토어 배포 프로필이 있어야 합니다.There must be an App Store distribution profile with the beta entitlement.

  • 새 iOS 앱 제출 창은 앱의 Info.plist와 정확히 동일한 정보를 포함해야 하며 모든 섹션을 채워야 합니다.The New iOS App submission window must contain exactly the same information as the app's Info.plist, and all sections must be filled in. TestFlight에 업로드하기 전에 앱에 대한 아이콘을 지정해야 합니다.Icons must specified for the app prior to uploading to TestFlight.

  • 새 빌드를 업로드하는 경우 iTunes Connect에 빌드가 나타날 때까지 1~5분 정도 걸립니다.When uploading a new build it will take somewhere between 1 and 5 minutes until the build appears in iTunes Connect.

  • TestFlight 베타 테스트 스위치는 앱의 버전 각각에 대해 설정해야 합니다.The TestFlight Beta Testing switch must be turned on for each Version of your app.

  • 내부 테스터이기도 한 개발자 팀의 각 구성원이 내부 테스터 스위치를 설정해야 합니다.Each member of the developer team that is also an internal tester must have the Internal Tester switch turned on.

  • 다른 iTunes Connect 계정에 속하거나 이 계정을 소유하고 있는 사용자는 내부 테스터가 될 수 없습니다.Users that belong to or own a another iTunes Connect account cannot be internal testers. 이러한 사용자는 외부 테스터로만 추가할 수 있습니다.They only can be added as external testers.

  • 내부 및 외부 사용자는 별도로 추가, 선택 및 초대합니다.Internal and External users are added, selected, and invited separately. 각 목록은 별도로 관리해야 합니다.Each list must be separately managed.

  • Apple은 외부 테스터에게 배포할 각 빌드를 승인해야 합니다.Apple must approve each build that will be distributed to external testers. 빌드 버전이 변경되면 Apple에 의한 새로운 베타 검토가 필요합니다.If the version of a build changes, a new beta review by Apple is required. 빌드 번호가 변경되면 검토는 선택 사항입니다.If the build number changes, then the review is optional.

  • 외부 테스터에게 배포되는 빌드에는 메타데이터가 추가되어야 합니다.Meta data must be added to builds that are distributed to external testers. 이는 My Apps > 시험판에서 빌드 번호를 클릭하여 액세스할 수 있습니다.This can be accessed by clicking on the build number in My Apps > Prerelease.

  • 검토를 위해 매일 두 개의 빌드만 제출할 수 있습니다.Only two builds can be submitted for review each day. 버전이 변경되면 검토가 강제로 수행되므로 버전 번호는 하루에 두 번만 변경할 수 있습니다.Since changing the version forces a review, this means that version numbers can only be changed twice per day.

.app 번들을 Windows로 다시 자동 복사Automatically copy .app bundles back to Windows

Visual Studio 및 Mac 빌드 에이전트에서 iOS 앱을 빌드하는 경우 .app 번들이 Windows 컴퓨터에 다시 복사되지 않습니다.When building iOS apps in Visual Studio and the Mac Build agent, the .app bundle is not copied back to the Windows machine. Visual Studio 7.4용 Xamarin Tools는 CI가 .app 번들을 Windows로 다시 복사하도록 해주는 새로운 CopyAppBundle 속성을 추가합니다.Xamarin Tools for Visual Studio 7.4 adds a new CopyAppBundle property that allows CI builds to copy .app bundles back to Windows.

이 기능을 사용하려면 이 기능을 적용하려는 속성 그룹에서 .csproj에 CopyAppBundle 속성을 추가합니다.To use this functionality, add theCopyAppBundle property to the .csproj under the property group you wish to apply this functionality to. 예를 들어 다음 예제는 iPhoneSimulator를 대상으로 하는 디버그 빌드를 위해 .app 번들을 Windows 컴퓨터에 다시 복사하는 방법을 보여줍니다.For example, the following example shows how to copy the .app bundle back to the Windows computer for a Debug build targeting the iPhoneSimulator:

<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|iPhoneSimulator' ">
    <CopyAppBundle>true</CopyAppBundle>
</PropertyGroup>