文章目录
  1. 1. 一、使用终端打包的旧方法
  2. 2. 二、使用终端打包的新方法
  3. 3. 三、给打出来的.ipa包名字后面加上日期和时间(时、分)
  4. 4. 四、显示打包花了多少时间
  5. 5. 五、修改bundleId、version和build号
  6. 6. 六、在打包的时候,修改工程,是否对打包有影响?
  7. 7. 七、把所有要配置的内容,集中放在一个地方
  8. 8. 八、添加是否上传蒲公英或fir.im

最近把Xcode升级到了Version 8.3.2(8E2002),发现原来的终端打包方式已经打不了.ipa包了。

一、使用终端打包的旧方法

原来的终端代码如下:

1
2
3
4
5
6
7
$ cd /Users/huangaengoln/Desktop/TKAPP_XDTX_branch_for_RZRQ_1.5.0-16-04-07
$ xcodebuild -list
$ xcodebuild -project TKApp_XDTX.xcodeproj -target TKApp_XDTX_invest -configuration Release
$ xcrun -sdk iphoneos -v PackageApplication ./build/Release-iphoneos/TKApp_XDTX_invest.app -o ~/Desktop/TKApp_XDTX_invest.ipa

于是只能重新寻找新的终端打包方式了。

关于打包,我们需要建立一个这样的观念:只要可以成功操作的功能,都是可以通过终端来实现的,特别是提供电脑系统的公司开发提供或推荐的软件。

在网上寻找一番后,找到了这2篇文章:

关于 iOS 批量打包的总结

使用xcodebuild打包 导出ipa 上传蒲公英或者提交AppStore

参考着第一篇文章,写出了新的行之有效的打包代码:

二、使用终端打包的新方法

1
2
3
4
5
6
//信达 TKApp_XDTX_invest
$ cd /Users/huangaengoln/Desktop/信达IOS_APP_for_2.1.0
$ xcodebuild archive -workspace TKApp_XDTX.xcodeproj/project.xcworkspace -scheme TKApp_XDTX_invest -archivePath ~/Documents/xcarchive/TKApp_XDTX_invest.xcarchive
$ xcodebuild -exportArchive -archivePath ~/Documents/xcarchive/TKApp_XDTX_invest.xcarchive -exportPath ~/Desktop/TKApp_XDTX_invest -exportOptionsPlist TKApp/TKApp_XDTX_invest-Info.plist

接着又寻思着,能不能把这些代码都写在一个可执行文件中,打包时直接拖进终端就可以执行这几句代码。因为打包时这几句就是配置好后简单的复制到终端,回车后等待,纯粹是体力活。

于是把上面的代码,写在了.sh文件中:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
#去到对应的工程目录
echo "~~~~~~~~~~~~~~~~去到对应的工程目录~~~~~~~~~~~~~~~~~~~"
cd ~/Desktop/信达IOS_APP_for_2.1.0
#工程路径
ProjectCurrentPath=`pwd`
#工程名称(Project的名字)
ProjectName="TKApp_XDTX" ###
#scheme名字 -可以点击Product->Scheme->Manager Schemes...查看
Scheme="TKApp_XDTX_invest" ###
#需要编译的 targetName
TARGET_NAME="TKApp_XDTX_invest" ###
#导出ipa 所需plist
ExportOptionsPlist=${ProjectCurrentPath}/TKApp/TKApp_XDTX_invest-Info.plist ###
# .xcworkspace 的路径
Workspace=${ProjectCurrentPath}/${ProjectName}.xcodeproj/project.xcworkspace ###
#编译路径
BUILDPATH=~/Desktop/xcarchive/${TARGET_NAME}_${Date}
#archivePath
ARCHIVEPATH=${BUILDPATH}/${TARGET_NAME}_${Date}.xcarchive
#输出的ipa目录
IPAPATH=${BUILDPATH}
#Release还是Debug
Configuration="Release"
echo "~~~~~~~~~~~~~~~~清除工程~~~~~~~~~~~~~~~~~~~"
# 清理 避免出现一些莫名的错误
xcodebuild clean -project ${PROJECTNAME}.xcodeproj
#构建
echo "~~~~~~~~~~~~~~~~开始编译~~~~~~~~~~~~~~~~~~~"
xcodebuild archive \
-workspace ${Workspace} \
-scheme ${Scheme} \
-configuration ${Configuration} \
-archivePath ${ARCHIVEPATH}
echo "~~~~~~~~~~~~~~~~检查是否构建成功~~~~~~~~~~~~~~~~~~~"
# xcarchive 实际是一个文件夹不是一个文件所以使用 -d 判断
if [ -d "$ARCHIVEPATH" ]
then
echo "构建成功......"
else
echo "构建失败......"
rm -rf $BUILDPATH
exit 1
fi
#生成ipa
echo "~~~~~~~~~~~~~~~~导出ipa~~~~~~~~~~~~~~~~~~~"
beginTime=`date +%s`
xcodebuild -exportArchive \
-archivePath ${ARCHIVEPATH} \
-exportPath ${IPAPATH} \
-exportOptionsPlist ${ExportOptionsPlist}
echo "~~~~~~~~~~~~~~~~检查是否成功导出ipa~~~~~~~~~~~~~~~~~~~"
IPAPATH=${IPAPATH}/${TARGET_NAME}.ipa
if [ -f "$IPAPATH" ]
then
echo "导出ipa成功......"
#打开ipa所在文件夹
open $BUILDPATH
else
echo "导出ipa失败......"
# 结束时间
endTime=`date +%s`
echo "$ArchiveTime"
echo "导出ipa时间$[ endTime - beginTime ]秒"
exit 1
fi

三、给打出来的.ipa包名字后面加上日期和时间(时、分)

打出ipa包后,可以在后面用终端命令修改.ipa的名字:

1
2
3
# 修改ipa包的名字
echo "~~~~~~~~~~~~~~~~修改ipa的名字~~~~~~~~~~~~~~~~~~~"
mv ${BUILDPATH}/${TARGET_NAME}.ipa ${BUILDPATH}/${TARGET_NAME}_${Date}.ipa

四、显示打包花了多少时间

在第一行获取开始时间:

1
beginTime=`date +%s`

当编译完成时,再获取编译后的当前时间,与开始时间的差值就是build所消耗的时间:

1
2
3
4
endTime=`date +%s`
ArchiveTime="构建时间$[ endTime - beginTime ]秒"
#... ...
echo "$ArchiveTime"

在打出ipa包前后,分别获取下当前时间,并计算差值,即打包所需时间:

1
2
3
4
5
6
beginTime=`date +%s`
#... ...
endTime=`date +%s`
ExportTime="导出ipa时间$[ endTime - beginTime ]秒"
#... ...
echo "$ExportTime"

五、修改bundleId、version和build号

在编译之前,可以修改工程.plist中的verseionhe、build等内容:

1
2
3
4
5
6
7
8
9
10
11
12
BundleIdentifier="com.thinkive.xxxx"
##版本号
ShortVersionString="2.1.6"
##Build号
BuildVersion="1.0.1"
###bundleID:com.thinkive.investxdtx
$PlistBuddyPath -c "Set :CFBundleIdentifier $BundleIdentifier" ${ExportOptionsPlist}
###版本号:2.1.5
$PlistBuddyPath -c "Set :CFBundleShortVersionString $ShortVersionString" ${ExportOptionsPlist}
###Build号:1.0.0
$PlistBuddyPath -c "Set :CFBundleVersion $BuildVersion" ${ExportOptionsPlist}

注意:不建议修改.plist中的BundleIdentifier。原来.plist中的BundleIdentifier的值是$(PRODUCT_BUNDLE_IDENTIFIER),直接修改为具体的值后会造成与Settings中的bundleID不一致。

对于不同的BundleIdentifier,可以通过建立不同的target来解决。

同时,需要声明的是,这里通过终端对.plist的修改,跟在工程中修改是等价的。

六、在打包的时候,修改工程,是否对打包有影响?

答曰:经过测试,不会有影响。

我这里只是简单的做了测试:在build的时候,直接去掉一句代码后面的;,观察是否会build失败。

七、把所有要配置的内容,集中放在一个地方

下面这段代码,是需要检查(路径是否正确)和配置的:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
#************************* 配置项目 ********************************************
#去到对应的工程目录
echo "~~~~~~~~~~~~~~~~去到对应的工程目录~~~~~~~~~~~~~~~~~~~"
cd ~/Desktop/信达IOS_APP_for_2.1.0
#工程路径
ProjectCurrentPath=`pwd`
#工程名称(Project的名字)
ProjectName="TKApp_XDTX" ###
#scheme名字 -可以点击Product->Scheme->Manager Schemes...查看
Scheme="TKApp_XDTX_invest" ###
#需要编译的 targetName
TARGET_NAME="TKApp_XDTX_invest" ###
#导出ipa 所需plist
ExportOptionsPlist=${ProjectCurrentPath}/TKApp/TKApp_XDTX_invest-Info.plist ###
# .xcworkspace 的路径
Workspace=${ProjectCurrentPath}/${ProjectName}.xcodeproj/project.xcworkspace ###
BundleIdentifier="com.thinkive.xxxx"
##版本号
ShortVersionString="2.1.6"
##Build号
BuildVersion="1.0.1"
#************************* 配置项目 结束 ********************************************

八、添加是否上传蒲公英或fir.im

下面是上传fir.im的一部分实践,后期继续探索:

构建fir.im的自动上传:

参考自:iOS开发进阶 - 使用shell脚本自动打包上传到fir.im上

Mac OS X 10.11 以后的版本, 由于10.11引入了 rootless, 无法直接安装 fir-cli, 有以下三种解决办法:

//… …

我选的是第三种方法:重写 Ruby Gem 的 bindir

1
2
$ echo 'gem: --bindir /usr/local/bin' >> ~/.gemrc
$ gem install fir-cli

然后再网页登录你的fir.im账号,拿到API Token(比如:你拿到的token是fa46398ca7dcf2ba25487be28ae68d75),接着在终端登录你的fir.im

1
2
$ fir login fa46398ca7dcf2ba25487be28ae68d75
$ fir me

如果出现以下类似的情况,说明登录成功了:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
huangsengolndeMacBook-Pro:~ huangaengoln$ fir me
Ignoring RedCloth-4.2.9 because its extensions are not built. Try: gem pristine RedCloth --version 4.2.9
Ignoring fast-stemmer-1.0.2 because its extensions are not built. Try: gem pristine fast-stemmer --version 1.0.2
Ignoring ffi-1.9.10 because its extensions are not built. Try: gem pristine ffi --version 1.9.10
Ignoring posix-spawn-0.3.11 because its extensions are not built. Try: gem pristine posix-spawn --version 0.3.11
Ignoring rdiscount-2.1.8 because its extensions are not built. Try: gem pristine rdiscount --version 2.1.8
Ignoring rdiscount-2.1.7 because its extensions are not built. Try: gem pristine rdiscount --version 2.1.7
Ignoring redcarpet-3.3.3 because its extensions are not built. Try: gem pristine redcarpet --version 3.3.3
Ignoring redcarpet-3.3.2 because its extensions are not built. Try: gem pristine redcarpet --version 3.3.2
Ignoring yajl-ruby-1.2.1 because its extensions are not built. Try: gem pristine yajl-ruby --version 1.2.1
I, [2017-05-27T11:34:43.203861 #80585] INFO -- : Login succeed, current user's email: huangsj@thinkive.com
I, [2017-05-27T11:34:43.204139 #80585] INFO -- : Login succeed, current user's name: huangsj
I, [2017-05-27T11:34:43.204221 #80585] INFO -- :
huangsengolndeMacBook-Pro:~ huangaengoln$
文章目录
  1. 1. 一、使用终端打包的旧方法
  2. 2. 二、使用终端打包的新方法
  3. 3. 三、给打出来的.ipa包名字后面加上日期和时间(时、分)
  4. 4. 四、显示打包花了多少时间
  5. 5. 五、修改bundleId、version和build号
  6. 6. 六、在打包的时候,修改工程,是否对打包有影响?
  7. 7. 七、把所有要配置的内容,集中放在一个地方
  8. 8. 八、添加是否上传蒲公英或fir.im