Jenkins에서 Uniy iOS 프로젝트의 TestFlight 배포 (수출 규정 준수도 지원)

Unity iOS 프로젝트에서 TestFlight 배포를 Jenkins에서 수행하는 방법입니다.

운영 환경



Xcode9.2, Xcode10.0
Unity2017
Jenkins2.70

전제



Jenkins에서 AdHoc 빌드는 완료된 상태를 가정합니다.
AdHoc 빌드의 Job에서 TestFlight의 Job으로의 변경 사항에 대한 설명입니다.

대략적인 흐름


  • exportOptionsPlist.plist 변경
  • Info.plist 에 수출 규정 준수에 대한 응답 작성
  • altool에서 유효성 검사 (필수가 아님)
  • altool 에 업로드

  • 1. exportOptionsPlist.plist의 방법을 app-store로 변경


    xcodebuild -exportArchive 의 옵션 exportOptionsPlist 로 지정하는 plist 파일을 변경합니다.
    아래와 같이 method 의 값을 ad-hoc 에서 app-store 로 합니다
    <plist version="1.0">
        <dict>
            <key>method</key>
    -        <string>ad-hoc</string>
    +        <string>app-store</string>
    

    2.Info.plist에 수출 규정 준수 응답 작성



    지금까지의 상태로 TestFlight에 업로드하면, 수출 컴플라이언스 정보가 없다고 하는 상태로 전달은 되지 않습니다
    암호화 기능이 포함되어 있지 않으면 아니오를 선택해야합니다.

    이 절차를 자동화하기 위해 Info.plist에 키 ITSAppUsesNonExemptEncryption를 추가하고 값을 No로 설정합니다.


    참고로, Unity PostProcessBuild 에서 Info.plist 에 위의 값을 추가하는 코드는 아래와 같습니다
    [PostProcessBuild]
    public static void OnPostprocessBuild(BuildTarget buildTarget, string path)
    {
        var plistPath = Path.Combine(path, "Info.plist");
        var plist = new PlistDocument();
        plist.ReadFromFile(plistPath);
        plist.root.SetString("ITSAppUsesNonExemptEncryption", "false");
        plist.WriteToFile(plistPath);
    }
    

    3.altool로 검증하기(필수는 아님)



    Jenkins의 Job에서 ipa 작성 이후의 부분에 쉘 실행을 추가하고, 아래 쉘을 실행하여 검증을 실시합니다
    TestFlight에 업로드할 수 있는 App Store Connect 사용자를 만들고 지정합니다.


    altool 옵션
    설명


    -f
    ipa 파일 경로

    -t
    유형 여기에서는 ios

    -u
    App Store Connect 사용자 이름

    -p
    App Store Connect 사용자 비밀번호


    참고로, 비밀번호는 Jenkins Mask Passwords Plugin를 사용하여 기록되지 않습니다.
    (APPSTORE_CONNECT_PASS 위치)
    /Applications/Xcode.app/Contents/Applications/Application\ Loader.app/Contents/Frameworks/ITunesSoftwareService.framework/Support/altool \
    --validate-app \
    -f Unity-iPhone.ipa \
    -t ios \
    -u hoge@ hoge.com \
    -p ${APPSTORE_CONNECT_PASS}
    

    4.altool로 업로드



    밸리데이션의 다음에 아래와 같은 쉘의 실행을 추가해 altool 로 업로드 합니다
    업데이트 후 잠시 후 내부 테스트 사용자에게 TestFlight 배포가 발생합니다.

    덧붙여 외부 테스트의 신청이나 외부 테스트 공개는 브라우저에서 수동으로 실시할 필요가 있습니다
    /Applications/Xcode.app/Contents/Applications/Application\ Loader.app/Contents/Frameworks/ITunesSoftwareService.framework/Support/altool \
    --upload-app \
    -f Unity-iPhone.ipa \
    -t ios \
    -u hoge@ hoge.com \
    -p ${APPSTORE_CONNECT_PASS}
    

    참고

    좋은 웹페이지 즐겨찾기