文章目录

  • 前言
  • 一、现象
  • 二、原因
  • 三、解决步骤
  • 四、示例
  • 五、参考

前言

在你的iOS团队中,如果在使用持续集成来完成自动化打包分发的工作,你可能会了解如何使用一些命令行工具来构建ipa文件,其中一款使用较为广泛的是xcodebuild

在我们的团队中有部分打包工作就是使用的xcodebuild,脚本代码大概如下:

ipaName = "${scheme}${buildConfiguration}"
// archive
xcodebuild -workspace ProjectName.xcworkspace -scheme ${scheme} -configuration ${buildConfiguration} clean archive -archivePath ./${ipaName}.xcarchive
// export
xcodebuild -exportArchive -archivePath ${ipaName}.xcarchive -exportOptionsPlist exportOptions_dev.plist -exportPath ./

exportOptions_dev文件如下:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict><key>method</key><string>development</string><key>teamID</key><string>yourTeamID</string>
</dict>
</plist>

以上配置在Xcode8及以下版本都可以正常运行的,在升级Xcode9以后上面的脚本会在export阶段出错。

一、现象

  • xcodebuild + Xcode9
    使用xcodebuild做打包构建时,执行exportArchive命令出错,错误信息:
error: exportArchive: "AppName.app" requires a provisioning profile with the Push Notifications and App Groups features.
Error Domain=IDEProvisioningErrorDomain Code=9
"AppName.app" requires a provisioning profile with the Push Notifications and App Groups features." UserInfo={NSLocalizedDescription="AppName.app" requires a provisioning profile with the Push Notifications and App Groups features., NSLocalizedRecoverySuggestion=Add a profile to the "provisioningProfiles" dictionary in your Export Options property list.}
// 或
"Error Domain=IDEProvisioningErrorDomain Code=9 \"\"ios-simple-objc.app\" requires a provisioning profile.\"
UserInfo={NSLocalizedDescription=\"ios-simple-objc.app\" requires a provisioning profile., NSLocalizedRecoverySuggestion=Add a profile to the \"provisioningProfiles\" dictionary in your Export Options property list.}"

二、原因

Xcode9 的打包需要指定以下信息,才能完成export操作:

  • provisioningProfiles
  • compileBitcode
  • method
  • signingCertificate
  • signingStyle
  • stripSwiftSymbols
  • teamID
  • thinning

三、解决步骤

你需要使用Xcode9先手动构建一次,使用构建生成的plist配置就可以完成export操作。

  1. 使用Xcode9打开你的工程

  2. 执行打包操作:Product -> Archive

  3. 打包完成后执行export操作(其中会需要你手动选择你的相关provison profile等信息),Xcode9会自动生成exportOptionsPlist文件,同时拷贝到你生成的ipa包的同级目录下。

  1. 直接使用Xcode9自动生成的exportOptionsPlist文件来进行xcodebuildexport操作,或者拷贝文件内容到你原来的exportOptionsPlist文件。
// Xcode9 export 生成的文件
DistributionSummary.plist
ExportOptions.plist
AppName.ipa
Packaging.log

四、示例

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict><key>compileBitcode</key><true/><key>method</key><string>development</string><key>provisioningProfiles</key><dict><key>com.xingshulin.abc</key><string>abc_dev</string><key>com.xingshulin.abc.NotificationServiceExtension</key><string>abc-Notification-dev</string></dict><key>signingCertificate</key><string>iPhone Developer</string><key>signingStyle</key><string>manual</string><key>stripSwiftSymbols</key><true/><key>teamID</key><string>yourTeamID</string><key>thinning</key><string><none></string>
</dict>
</plist>

五、参考

New export options Plist in Xcode 9

Xcode9 xcodebuild export plist 配置相关推荐

  1. Xcode9 xcodebuild 命令行打包遇到的坑与解决方案

    主要涉及的打包脚本命令 if [ $xcodeversion -lt 830 ] then #Xcode 8.3 以下打包时使用该脚本 xcodebuild -exportArchive -expor ...

  2. iOS9网络适配 info.plist配置

    <key>NSAppTransportSecurity</key><dict><key>NSAllowsArbitraryLoads</key&g ...

  3. iPhone X适配以及iOS 11可能出现的常见崩溃(info.plist配置)

    iPhone X适配 程序启动图,引导图等 iPhone X像素尺寸1125x2436,也就是说,你的启动图或者是闪屏页,App引导图等得新加一个图了,另外iPhone X用的是三倍图,开发用的逻辑分 ...

  4. iOS持续集成-Xcodebuild命令

    为什么 打包一般使用GUI操作进行.但是对于复杂工程还是繁琐.比如同一个工程对应多个target,多个scheme,多个证书.另外对于持续化集成还不足够,所以需要使用Xcodebuild进行脚本化. ...

  5. iOS 11和xcode9

    最近发现了比较奇怪的问题,就是 ios10.几以前的版本,用xcode9 编写的程序   如果程序写的table是  plain的  ,那么  在  ios10.几及以下版本都会显示成group样式, ...

  6. Mac 下 Nginx、PHP、MySQL 和 PHP-fpm 的安装和配置

    原文:Mac 下 Nginx.PHP.MySQL 和 PHP-fpm 的安装和配置 个人博客永久地址. 文章做了更新,增加了php-fpm的配置相关信息. 杂七杂八的杂 Mac下搭建MNPM环境是每个 ...

  7. 【iOS小白教程】如何打包:xcodebuild和xcrun介绍

    摘抄自2016-06-25-ios-xcodebuild xcodebuild 简介 xcodebuild 用于编译xcode中的projects和workspaces 文档 1 在终端中输入 $ m ...

  8. IOS xcodebuild

    <?xml version="1.0" encoding="UTF-8"?><!DOCTYPE plist PUBLIC "-//A ...

  9. xcodebuild命令的使用

    最近再看xcodebuild使用,毕竟个人感觉命令行的方式比在界面上来的快,这里记录了一下心得. 首先,终端输入 man xcodebuild 下面是man输出的文档,大致做了一下重点 xcodebu ...

最新文章

  1. 机器学习中的数学基础:(1)实际应用中矩阵特征值与特征向量的几何意义
  2. Your First Concordion.Net Project (Part 5)-Running Specs with Gallio
  3. C 线程中容易忽视的 restrict 修饰符修饰
  4. C++ Primer 5th笔记(chap 14 重载运算和类型转换)下标运算符[]
  5. 一个简单的三层架构例子(.NET入门)
  6. 成都Uber优步司机奖励政策(4月2、3日)
  7. C++设计模式之Template Method(模板方法模式)
  8. linux mate桌面主题下载_5个适用于Linux的最佳图标主题
  9. 中国统计年鉴(1978-2020年)
  10. 2021-10-20
  11. java实现socket长连接_java如何实现Socket的长连接和短连接
  12. 【汇编】2、从汇编源码逐步分析函数调用过程
  13. python给图片加边框,照片加边框,照片加描边,图片加描边,批量给图片加描边
  14. pip install使用豆瓣库
  15. CSS-animation-梦幻西游小案例
  16. 生产服务器变慢了排查思路
  17. 斯坦福教授告诉你:什么是多任务学习「 CS330 笔记 (二) 」
  18. npm install安装时卡在sill idealTree buildDeps,npm安装速度慢,npm安装卡在一个地方不动,npm遇到ssl问题,An unknown git error occu
  19. SpringBoot项目移除bean
  20. 关于专栏收费的公告与费用用途

热门文章

  1. error#10052:could not checkout FLEXlm license
  2. 使用c++实现学生成绩管理系统
  3. jira的详细安装和破解
  4. [原]查找透明表的实用方法
  5. 旁挂二层组网隧道转发
  6. 哥特体css样式叫什么,css – 世纪哥特字体可用性问题
  7. Openjudge:奥运奖牌计数
  8. 2021-06-02web渗透学习WindowsXP/2003 Lpk提权
  9. java编程入门pdf_Java 8编程入门官方教程(第6版) [(美)Schildt H.] 中文完整pdf扫描版[233MB]...
  10. ajaxSubmit提交数据重复