iOS 测试 xcodebuild 命令行打包遇到的坑与解决方案 2017

fionawei · 2017年10月10日 · 最后由 不二家 回复于 2017年10月11日 · 5661 次阅读

第一个问题

** 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 等
共收到 1 条回复 时间 点赞

现在回头看,iOS 打包结合 xcconfig,将必要的参数参数化,方便打各种格式的包,比如,adhoc,inhouse 和 appstore,然后加上 xcodebuild 就足够了,并不需要 fastlane。

需要 登录 后方可回复, 如果你还没有账号请点击这里 注册