명령줄에서 iOS 앱 사임

5607 단어 bashswiftios
만료되는 프로비저닝 프로필 또는 새 프로필로 인해 iOS 앱을 사임해야 합니까?
번들 식별자이지만 프로젝트 파일에 대한 액세스 권한이 없습니다.
( .xcodeproj 또는 .xcworkspace )? 또는 프로젝트에 대한 액세스 권한이 있을 수 있습니다.
파일이지만 환경의 Xcode 버전은 내에서 프로젝트를 빌드할 수 없습니다.
어떤 이유로 든 GUI? 이 기사에서는 해결책을 알려 드리겠습니다.
Xcode를 열지 않고 앱을 종료합니다.


가정



당신은
  • Xcode가 설치된 Mac
  • iOS 앱 파일( .ipa )
  • 앱을 탈퇴하려는 유효한 프로비저닝 프로필
    ( .mobileprovision )
  • 위 프로비저닝 프로파일에 대한 유효한 배포 인증서
    Mac의 키체인에서 인증서를 생성하는 데 사용되는 개인 키 사용

  • 해결책



    다음은 다운로드할 수 있는 내가 작성한 bash 스크립트입니다.

    다운로드 후 스크립트의 권한을 허용하도록 변경해야 합니다.
    실행 가능하도록:

    $ chmod 755 resign-ios-app
    


    용법



    지침 메시지를 보려면 인수 없이 스크립트를 호출합니다.

    $ ./resign-ios-app
    Expected at least three arguments.
    Something like 'AnApp.ipa' 'AProvisioningProfile.mobileprovision' 'iPhone Distribution: AnOrganization' where
      $1 is an .ipa file
      $2 is a .mobileprovision
      $3 is the name of a distribution certificate in the Keychain
    You may pass a fourth argument to serve as a new bundle identifier for the resigned app. If not included, the original bundle identifier will be used.
    


    이 스크립트가 있다고 가정하면 .ipa.mobileprovision가 모두
    동일한 폴더에 있으며 해당 폴더에 있습니다.

    $ ./resign-ios-app 'AnApp.ipa' 'XC_iOS_comcompanyAnApp.mobileprovision' 'iPhone Distribution: AnOrganization'
    Unzipping "AnApp.ipa"...
    Extracting .app...
    Removing existing _CodeSignature...
    Decoding "XC_iOS_comcompanyAnApp.mobileprovision" and writing to ProvisioningProfile.plist...
    Extracting "Entitlements" from ProvisioningProfile.plist and writing to Entitlements.plist...
    Embedding "XC_iOS_comcompanyAnApp.mobileprovision" into "AnApp.app"...
    Resigning "AnApp.app" with existing bundle identifier "com.company.AnApp"
    Resigning embedded Swift libraries...
    ./libswiftCoreImage.dylib: replacing existing signature
    ./libswiftObjectiveC.dylib: replacing existing signature
    ./libswiftCore.dylib: replacing existing signature
    ./libswiftCoreGraphics.dylib: replacing existing signature
    ./libswiftUIKit.dylib: replacing existing signature
    ./libswiftMetal.dylib: replacing existing signature
    ./libswiftCoreData.dylib: replacing existing signature
    ./libswiftDispatch.dylib: replacing existing signature
    ./libswiftos.dylib: replacing existing signature
    ./libswiftCoreFoundation.dylib: replacing existing signature
    ./libswiftDarwin.dylib: replacing existing signature
    ./libswiftQuartzCore.dylib: replacing existing signature
    ./libswiftCoreAudio.dylib: replacing existing signature
    ./libswiftAVFoundation.dylib: replacing existing signature
    ./libswiftFoundation.dylib: replacing existing signature
    ./libswiftCoreMedia.dylib: replacing existing signature
    ./libswiftsimd.dylib: replacing existing signature
    Resigning embedded frameworks...
    ./BarcodeScanner.framework: replacing existing signature
    ./SQLite.framework: replacing existing signature
    Resigning "AnApp.app" with certificate "iPhone Distribution: AnOrganization"...
    Payload/AnApp.app: replacing existing signature
    Zipping app data into an .ipa...
    Resigning successful. Resigned app to /Users/daniel/resign-ios-app/resigned.ipa
    


    사임에 성공하면 폴더에 몇 가지 추가 파일이 있음을 알 수 있습니다.

    $ ls -l
    -rw-rw-r--@ 1 daniel  staff  11506405 Nov 19 15:57 AnApp.ipa
    -rw-r--r--@ 1 daniel  staff       228 Feb  4  2019 AppThinning.plist
    -rw-r--r--  1 daniel  staff       517 Nov 22 18:29 Entitlements.plist
    -rw-r--r--@ 1 daniel  staff      7354 Nov 19 10:26 XC_iOS_comcompanyAnApp.mobileprovision
    drwxr-xr-x@ 3 daniel  staff        96 Feb  4  2019 Payload
    -rw-r--r--  1 daniel  staff      3382 Nov 22 18:29 ProvisioningProfile.plist
    -rw-r--r--  1 daniel  staff  11488043 Nov 22 18:29 resigned.ipa
    

    Payload.plist 파일은 스크립트의 아티팩트이며 삭제할 수 있습니다.resigned.ipa를 배포하는 것이 좋습니다.

    테스트



    이 스크립트를 다음에서 개발하고 테스트했습니다.
  • macOS 10.15.7
  • 엑스코드 12.2
  • GNU bash, 버전 5.0.7(1)-릴리스(x86_64-apple-darwin16.7.0)

  • 즉, 이 스크립트는 macOS의 내장 버전bash
    version 3
    과 최신 버전의 macOS 및 Xcode에서 작동해야 합니다.

    가능한 경우 이 솔루션에 대해 my repository에 대한 문제를 생성하십시오.
    더 복잡한 사임에 대한 개선 사항을 제공합니다.

    좋은 웹페이지 즐겨찾기