문제

사용 중입니다 xcodebuild 명령 줄에서 iPhone 앱을 컴파일하려면. 프로비저닝 프로파일을 설정하기 위해 일종의 옵션을 전달할 수있는 방법이 있습니까? 일반적으로 XcodeBuild에 대한 정보는 그리 많지 않은 것 같습니다.

도움이 되었습니까?

해결책

선적 서류 비치

DOC에서 보이면 프로비저닝 파일을 설정할 수는 없지만 대상을 지정할 수 있습니다.

-Target TargetName

따라서 각 프로비저닝 파일에 대한 대상을 작성하면 명령 줄에서 적절한 대상을 선택할 수 있습니다.

이것은 기본적으로 당신의 요구를 달성합니다.

다른 팁

실제로 Xcode 명령 줄 설정에 추가 할 수 있어야합니다.

xcodebuild [다른 옵션이 무엇이든] Provisioning_Profile = [귀하의 프로필 고유 ID는 여기]

명령 줄의 빌드 설정은 모든 것을 무시해야하므로 프로젝트 또는 대상에 정의 된 모든 것을이기려고합니다.

내 솔루션은 우아하지는 않지만 작업을 수행하고 빌드 서버의 모든 것을 자동화 할 수 있습니다.

#!/bin/bash

TARGET="Your App"
CONFIGURATION="Release"
SDK="iphoneos"
PROFILE_PATH="/Users/jkp/Desktop/foo.mobileprovision"
IDENTITY="iPhone Distribution: Your Company Ltd"
KEYCHAIN="/Users/jkp/Desktop/keychain"
PASSWORD="foobar"

open "${PROFILE_PATH}"
sleep 5
osascript -e "tell application \"Xcode\" to quit"
security unlock-keychain -p ${PASSWORD} ${KEYCHAIN}
xcodebuild \
  -target "${TARGET}" \
  -configuration ${CONFIGURATION} \
  -sdk iphoneos \
  CODE_SIGN_IDENTITY="${IDENTITY}" \    
  OTHER_CODE_SIGN_FLAGS="--keychain ${KEYCHAIN}"

여기서 중요한 것은 프로비저닝 프로파일을 먼저 설치할 필요가 없다는 것입니다. 실제로 Mechanize를 사용하여 각 빌드 전에 프로비저닝 프로파일의 최신 사본을 다운로드하는 다른 스크립트가 있습니다. 즉, 프로파일을 원격으로 업데이트하고 추가 작업없이 CI 서버에서 변경 사항을 선택할 수 있습니다.

메모: 이후 Xcode를 전혀 포함시키지 않고 프로비저닝 프로파일을 설치하거나 업데이트하는 방법을 찾았습니다. 보다 여기 자세한 내용은.

프로비저닝 프로파일은 UUID에 의해 제공되어야하며, 제 경우에는 프로비저닝 프로파일이 소스 제어 시스템에 체크인하므로 개발자/빌드 서버/CI 시스템이 코드로 체크 아웃합니다. 소스 트리에서 프로파일에는 myapp.mobileprovison과 같은 사람이 읽을 수있는 이름이 있으며 "ProvisioningProfiles"라는 디렉토리에 있습니다. XcodeBuild가이를 인식하기 전에 Xcode Archive를 만들려면 Xcode Archive를 만들려면 XcodeBuild가이를 인식하기 전에 ~/library/mobiledevice/Provisioning Profiles Directory에 이름을 바꾸고 복사해야합니다. 이것은 CI 빌드 스크립트에서 사용할 수있는 코드 스 니펫입니다.

# The keychain needs to be unlocked for signing, which requires the keychain
# password. This is stored in a file in the build account only accessible to
# the build account user
if [ ! -f $HOME/.pass ] ; then
    echo "no keychain password file available"
    exit 1
fi

case `stat -L -f "%p" $HOME/.pass`
in
    *400) ;;
    *)
        echo "keychain password file permissions are not restrictive enough"
        echo "chmod 400 $HOME/.pass"
        exit 1
        ;;
esac

#
# unlock the keychain, automatically lock keychain on script exit
#
security unlock-keychain -p `cat $HOME/.pass` $HOME/Library/Keychains/login.keychain
trap "security lock-keychain $HOME/Library/Keychains/login.keychain" EXIT

#
# Extract the profile UUID from the checked in Provisioning Profile.
#
uuid=`/usr/libexec/plistbuddy -c Print:UUID /dev/stdin <<< \
        \`security cms -D -i ProvisioningProfiles/MyApp.mobileprovision\``

#
# Copy the profile to the location XCode expects to find it and start the build,
# specifying which profile and signing identity to use for the archived app
#
cp -f ProvisioningProfiles/MyApp.mobileprovision \
        "$HOME/Library/MobileDevice/Provisioning Profiles/$uuid.mobileprovision"
xcodebuild -workspace MyApp.xcworkspace -scheme MyScheme \
        -archivePath build/MyApp.xcarchive archive \
        PROVISIONING_PROFILE="$uuid" CODE_SIGN_IDENTITY="iOS Distribution"

키 체인을 잠금 해제해야하고 "/usr/bin/codesign"도구는이 작업에 대한 신분에 서명하는 것과 관련된 개인 키에 액세스 할 수 있어야합니다. 다음 참조가 사용되었습니다. https://stackoverflow.com/a/21327591/2351246 그리고 키 체인없이 개인 키 ACL에 CodesIGN을 추가하십시오 CodesIGN에 대한 키 체인 액세스 잠금을 해제하고 추가합니다.

XcodeBuild를 사용하여 아카이브를 이후에 IPA로 내보내려면 다음 문제를 고려해야합니다 (xcodebuild .app에서 파일을 복사하지 않습니다). 프로비저닝 프로파일을 다시 제공해야합니다. IPA를 만들기위한 스크립트 스 니펫은입니다

profileName=`/usr/libexec/plistbuddy -c Print:Name /dev/stdin <<< \
        \`security cms -D -i ProvisioningProfiles/MyApp.mobileprovision\``

xcodebuild \
        -exportArchive \
        -exportFormat IPA \
        -archivePath build/MyApp.xcarchive \
        -exportPath $IPADIR/MyApp.ipa \
        -exportProvisioningProfile "$profileName"

이 명령이 실행되는 동안 키 체인을 잠금 해제해야합니다.

업데이트

OSX Mavericks (v10.9.5) 및 OSX Yosemite에서는 코드 서명 오류를보기 시작했습니다.

Codesign check fails : ...../MyApp.app: resource envelope is obsolete

원인은 여기 에서이 게시물을 확인하십시오 xcodebuild -Codesign -vvvv는 "자원 봉투가 쓸모 없다"고 말합니다.

참조 된 게시물에서 Apple Support가 제안한 변경 사항을 구현하려면 다음 명령을 실행하십시오.

 sudo perl -pi.bak -e 's/--verify"./--verify", "--no-strict",/ if /codesign.*origApp/;' `xcrun -sdk iphoneos -f PackageApplication`

나는 이것이 아마도 OP Off OP 주제 일 것임을 알고 있지만,이 질문은 Jenkins에서 Xcode 빌드를 얻는 방법을 검색 할 때 먼저 나타납니다. 후손에 대한 추가 정보를 여기에 게시합니다. 그리고 포인트. 이것이 유용하다고 생각되면 포인트를주십시오 :)

어쨌든, 최근에 몇 차례에 몇 라운드를 갔다. 이것을 찾았습니다 :

http://code-dojo.blogspot.co.uk/2012/09/fix-ios-code-signing-issue-using.html

작동하는 것 같습니다. 확인하십시오 :

  1. Xcode 빌드를 일반 OSX 사용자로서 먼저 설정하십시오. Xcode를 통해 프로비저닝 프로파일 문제를 수정하여 배포 가능하게 만들 수 있습니다.

  2. 일반 OSX 사용자로서 XcodeBuild를 사용하여 명령 줄 빌드를 작동시킵니다.

  3. 그런 다음 위의 게시물의 지침을 문자로 따르고 로그인 키 체인에서 시스템으로 모든 iOS CERT를 복사하고 복사하십시오. ~/Library/MobileDevice/Provisioning Profiles Jenkins 사용자에게 ~jenkins/Library/MobileDevice/Provisioning Profiles 폴더.

위의 2 단계의 명령을 사용하여 다음 Jenkins 빌드는 완벽하게 작동해야합니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top