1. 程式人生 > >iOS 測試 xcodebuild 命令列打包遇到的坑與解決方案 2017

iOS 測試 xcodebuild 命令列打包遇到的坑與解決方案 2017

第一個問題

** INTERNAL ERROR: Uncaught exception **
Uncaught Exception: -[__NSCFString objectForKeyedSubscript:]: 
unrecognized selector sent to instance 0x7fd4c8e38fd0

原因分析:Export Options plist檔案裡的格式不對,導致引數無法識別
解決方案:修改Export Options plist檔案裡的格式

第二個問題:

error: exportArchive: "Cicada.app" requires a provisioning profile.
Error Domain=IDEProvisioningErrorDomain Code=9 ""Cicada.app" requires a provisioning profile." 
UserInfo={NSLocalizedDescription="Cicada.app" requires a provisioning profile., 
NSLocalizedRecoverySuggestion=Add a profile to the "provisioningProfiles" 
dictionary in your Export Options property list.}

原因分析:取不到provisioningProfiles的資訊
解決方案:在Export Options plist檔案裡新增以下內容

<key>provisioningProfiles</key>
    <dict>
        <key>com.lianjia.name</key>
        <string>{iOS Provisioning Profiles Name}</string>
    </dict>

解釋:com.lianjia.name -> APP對應bundleID
{iOS Provisioning Profiles} -> iOS Provisioning Profiles 對應的Name

 

第三個問題
NSLocalizedDescription=Provisioning profile "General" doesn't include signing certificate "iPhone Developer: ******".}

原因分析:Provisioning Profiles檔案未更新
解決方案: 資源庫---->MobileDevice---->Provisioning Profiles,將裡面的齒輪檔案全部刪除,然後到Xcode下的Preferences下Account重新下載新的齒輪檔案以及證書即可

第四個問題

Error Domain=IDEProfileLocatorErrorDomain Code=4 "No "iOS App Development" profiles for team '*****' matching '1825adbe-226c-401e-940d-d3dcede386*' are installed." UserInfo={NSLocalizedDescription=No "iOS App Development" profiles for team '*****' matching '1825adbe-226c-401e-940d-d3dcede386a*' are installed., NSLocalizedRecoverySuggestion=Install a profile (by dragging and dropping it onto Xcode's dock item) or specify a different profile in your Export Options property list.}

原因分析:因為解決上一個問題的時候刪除了Provisioning Profiles檔案,起初設定的profile的UUID,導致設定的對應的Profiles UUID找不到了
解決方案:修改Export Options plist檔案裡的provisioningProfiles,改為profile name即可,可避免UUID每次更新後都會變的問題

所使用的打包命令:

  1. 進入build路徑clean一下你的工程
    xcodebuild clean -workspace ${TARGET_NAME}.xcworkspace -scheme ${TARGET_NAME} -configuration ${BUILD_TYPE}

  2. archive匯出.xcarchive檔案
    xcodebuild archive -workspace ${TARGET_NAME}.xcworkspace -scheme ${TARGET_NAME} -archivePath {ARCHIVEPATH}

  3. 匯出ipa包
    xcodebuild -exportArchive -archivePath "${ARCHIVEPATH}/${TARGET_NAME}.xcarchive" -exportPath ${EXPORTPATH} -exportOptionsPlist ${EXPORTOPTIONSPLIST}

解釋:

  1. ${TARGET_NAME} 專案對應targets的名字
  2. ${BUILD_TYPE} 打包型別 Debug,Release 等
  3. ${archivePath} .xcarchive檔案匯出目錄
  4. ${EXPORTPATH} 匯出.ipa包的目錄
  5. ${EXPORTOPTIONSPLIST} exportOptionsPlist檔案所在目錄,可判斷development, ad-hoc等