1、接手党建项目,甘肃的项目有3个,一个正式,一个内测,一个开发,都是一套代码,就是bundleId、版本号、热更新服务器地址不一样,这也太扯了,加个功能、改个功能就要改3遍。
2、拿来就干,打开主工程,在原有的target基础上duplicate一个新的,修改新生成的plist名字和manage scheme中的名字,还有build setting中的info.plist,如图:
3、修改后打development包,没问题。成功生成ipa。
4、拷贝到专门打包机器上,用正式的mobileprovision打包。报错:
Error verifying code signature!
XXXXXXXXXXX a sealed resource is missing or invalid
5、擦擦擦擦擦,这是为啥。
6、搜了搜,虽然有报相同错误的,但是情况明显不一样。我用自己的机器打包没问题,打正式包有问题,神奇。
7、关键是打包软件 app signer还不具体的错,只有个笼统的错。这就只能靠猜了
8、先排除多target设置问题,我新建个test项目,用cocoapods搞了个masonary,在主页用约束写了个界面。duplicate个target,改名、改设置之后本机打包没问题,正式打包也没问题。
9、我又拿任我行做实验,duplicate个target,改名、改设置之后本机打包没问题,正式打包也没问题。
10、那我心里就有底了,那就是这个项目的设置问题。
11、对比一下甘肃打出的正式包和新建的dev target包生成的文件看是否一致。经对比68个文件,除了mach-o文件以外其他文件都一致。
12、那就是mach-o文件不一致了,哪不一致呢,文件名不太一样以外也没啥。用mach-OView查看也没看出个所以然来。
13、那就从build-settings入手,既然打包出错,就搜索packaging部分看看具体都有啥区别。
14、注意到"Product Module Name"和 "Product Name"文件名称竟然不一样,Product Module Name是写死的“gansudangjian”,Product Name是标识符${TARGET_NAME},和新建的target名字保持一致。
15、查看一下新建的test项目这个地方的设置:
16、那俩项的内容显示一致。
17、test项目Product Module Name写的是"$(PRODUCT_NAME:c99extidentifier)",把这个内容拷贝到甘肃项目里,改后的build settings如图:
18、再次在本机打包,OK。去打包机器上打正式包,也OK。oh yeah~~~~
19、最后别忘了改一下cocoapods项,添加一下多target设置,我这个工程共用一套pod,所以duplicate target的时候用系统直接拷贝过来的daosaojiao target的脚本就ok,不需要做任何修改,如图:
20、后记
后来照着内测工程把daosaojiao_dev的display Name、bundle Identifier、Version都改了。又打包报错,真tm神奇。
又去找build settings设置,display Name修改完后,build settings中的 “Product Name” 就自动变为写死display Name了,xcode默认display Name = Product Name
21、之前Product Name是跟随新建的target名字,能不能是因为product name和 target的名字对不上导致的打包失败。
22、改回$(TARGET_NAME) 跟target的名字一致,Display Name也跟着变成了target的英文名。两次打包成功。还真是这个原因。在plist中把app显示的名字单独改一下(CFBundleDisplayName),写死就ok了。
23、那为什么正式版老的target的名字和display name和Product Named都不一致都没问题,太神奇了,Product Module Name 和 Product Named都是写死的“gansudangjain”,哪位大神知道帮忙解答一下。
24、我尝试新建了一个中文名字的target,这次target名字、product name、display name都保持了一致,打包依旧失败,我有点方!@#¥%……&*()
PS:通篇读一遍自己写的东西,咋这么绕~~~~~~~~~~~~~