在实际应用中需要用到debug的安装包,所以决定自己学习一下打包,打包过程中遇到了各种问题,下面记录了一下我在打包中用到的步骤,当然我还有很多不明白的地方,如果有不对的地方,希望可以大家可以指出
 
环境要求
1.安装xcode
直接在AppStore里下载即可,是免费的
 
2.安装CocoaPods(包管理工具)
 
3.安装protobuf
brew install protobuf
protoc --version
 
说明:注意protobuf的版本,比如我们需要的是低版本的protocbuf 2.4.1。protobuf高版本和低版本的语法是不一样的
安装protobuf2.4.1的方法和可能遇到的问题参照我另一篇随笔:http://www.cnblogs.com/meitian/p/5791042.html
 
 
通过个人appleid打debug包安装到机器
如果打release包是一样的,只是需要有可以打release包的证书
个人的applieid及时不去买证书,也支持打debug包了,只有.app格式的,可以直接安装到真机上
 
1.注册appleid
 
2.xcode添加appleid
Xcode->Preferences…,弹框选择Accounts。点击左下角的+号,选择Add Apple ID…。然后选择填写自己的applied账号即可。
 
 
3.修改工程的General的Identity。
Bundle Identifiable取一个别人没用过的名字。Team选择自己刚添加applied时生成的一个Team。(可以看到是一个Personal Team)
 
build setting的tab下包含了签名等选项,默认都是没问题的,如果有问题就按照实际遇到的错误提示来看吧。
 
最终只要保证Identity下Fix issue没有了就是对的,如果有就点一下Fix Issue按钮,查看具体错误,全部解决后就可以了
 
4.buld编译
Product->Build,生成targetname.app文件夹
 
存放位置默认在/Users/用户名/Library/Developer/Xcode/DerivedData/产品名称-emqwbznkiewpmvggtnsesohciziq/Build/Products
 
编译结果默认的路径是可以更改的,路径是在Xcode->Preferences...->Locations->Derived Data决定,可以通过Advanced...去更改,具体详见下面两个图
 
更改build结果存放路径:
 
5.在模拟器或真机中直接安装包
 
第一步选择要安装的设备:点击下图红框中的位置选择连上的真机或模拟器
 
 
第二步run:点击Product->Run
 
打包生成ipa包
一、打包前提
1.首先需要导入证书和Provisioning配置文件,我这里用的是团队共享的
导入证书:双击.p12文件,如果有密码输入密码,自动安装到钥匙串里了(launchpad->其他->钥匙串)
导入Provisioning配置文件:双击.mobileprovision共享配置文件,该文件就会被复制到存放配置文件的目录(~/Library/MobileDevice/Provisioning Profiles)
 
导入的证书,那Bundle Identifier就必须和证书中的一致,否则会编译失败
 
2.必须连接了真机,否则Archive是置灰的
通过Window->Devices去添加设备
 
二、通过xcode打包
Product->Archive,然后在打包成功页面export即可
 
 
注意:只有appleid没花钱的那种是不能export出.ipa文件的
 
三、通过命令行xcodebuild打包生成ipa
 
第一步:清理
xcodebuild -target targetname clean
清理后会防止编译时遇到一些奇怪的问题
 
第二步:编译
使用pod后工程目录下有两个文件:xxx.xcworkspace,xxx.xcodeproj
xcworkspace是工作区文件,xcodeproj是工程文件,工作区文件包含工程文件。
如果有工作区xcworkspace的直接用工作区去编译就可以了
 
xcodebuild -scheme shemename -workspace xxx.xcworkspace build
 
如果没有xcworkspace文件,只有xcodeproj文件,就用下面的命令去编译
xcodebuld -target targetname build
 
备注:在build时候有很多其他参数可以选择,例如ARCHS、VALID_ARCHS等,根据自己需要来加吧,会影响到打包后结果,这里我也不是很清楚各个参数
 
存放位置默认在/Users/用户名/Library/Developer/Xcode/DerivedData/产品名称-emqwbznkiewpmvggtnsesohciziq/Build/Products,参考上面用xcode编译时的结果
 
第三步:打包
找到编译成的targetname.app文件夹,使用下面的命令进行打包生成.ipa文件
 
xcrun -sdk iphoneos PackageApplication -v targetname.app所在目录/targetname.app"  -o 想要输出的目录/文件名.ipa
 
 
 
 
 
打包时遇到的问题
问题1:提示protoc版本太高
This file was generated by an older version of protoc which is
或者有些依赖包,通过高版本的pod根本就没装成功
 
 
解决方法:设置一个低版本的protoc,可以参考我的另一篇博客http://www.cnblogs.com/meitian/p/5791042.html
 
问题2:很多include的文件找不到
 
解决方法:
将Build Setting中的Search Paths,Header Search Paths的寻找方式都改为non-recursive(非递归)
 
 

通过xcode或xcodebuild进行打包的更多相关文章

  1. Xcode 6、7 打包

    从 Xcode 6 开始,打包需要开发者帐号添加到授权帐号列表里. 现实情况是作为公司开发工作者,很少能获此殊荣. 解决之道: 用 Xcode 6/7 照常打包,生成 *.xcarchive 文件,然 ...

  2. xcodebuild 自动化打包

    altool 文档 使用xcode自带的xcodebuild 命令通过脚本进行打包 打包->导出ipa, 两行关键的脚本代码 1.Archive xcodebuild archive -arch ...

  3. 解析Xcode把应用程序打包成ipa---解决打包完新版本itunes提示不是有效应用程序的问题

    Xcode把应用程序打包成ipa是本文要介绍的内容,不多说,先俩看内容.注意:本方法需要先制作假凭证编译于项目中,否则产生的ipa还是无法于iPhone中运行. 制作方法请参考: http://blo ...

  4. Xcode把应用程序打包成ipa

    Xcode把应用程序打包成ipa 分类: App Store2012-11-20 15:47 11722人阅读 评论(0) 收藏 举报 Xcode教程 Xcode4发布测试 打包Archive操作是本 ...

  5. (转)最近研究xcodebuild批量打包的一些心得

    以前的时候只知道做安卓开发的兄弟挺辛苦的,不但开发的时候要适配一堆的机型,好不容易开发完了还要打一堆不同的包给不同的市场.没想到现在这些市场都开辟iOS市场,于是需要打一堆的包给不同的市场,面对暂时给 ...

  6. 最近研究xcodebuild批量打包的一些心得

    http://blog.csdn.net/tlb203/article/details/8131707 转自Rainbird的个人博客 以前的时候只知道做安卓开发的兄弟挺辛苦的,不但开发的时候要适配一 ...

  7. iOS开发遇到的坑之三--使用asi框架在xcode下正常运行,但是打包时却不能进行网络访问

    前言: 前两篇博客遇到的问题是前几天在实验室开发的时候遇到的,花了两三天时间在上面,今天突然心血来潮,想把这些”坑”写下来,所以才有了这两篇写的很丑的博客随笔 今天在开发时又遇到一个问题,那就是标题所 ...

  8. xcodebuild自动打包上传到蒲公英的shell脚本

    注意: ExportOptions.plist (包含了证书相关信息) 该plist 文件可以通过xcode手动导出ipa之后获取到, 区分appstore 和 development的情况 #! / ...

  9. xcode archive灰色,无法打包的解决办法

    问题如图: 解决办法:目前的运行配置是使用模拟器,改成“iOS Device”即可 step1: step2: 修改后archive选项变为黑色,可点击状态了

随机推荐

  1. java文件下载

    /** * zip 导出 * @param response * @param zipName * @throws Exception */ private void outZip(HttpServl ...

  2. tomcat切割日志的shell脚本

    #!/bin/bash cd /usr/tomcats/ d=`date +%F` m1=`date -d'1 month ago' +%F` ` do cd tomcat808"$i&qu ...

  3. mysql source命令超大文件导入方法总结

    本文章来给各位朋友介绍利用mysql source命令超大文件导入方法总结,下面收集了两种解决办法,一种是把数据库分文件导出然后再导入,另一种是修改my.ini配置文件,下面我一一给各位朋友介绍. 导 ...

  4. 关于Mac下的SSH客户端iterm2等配置

    linux后台开发的同学们晓得,在windows下有xshell\securecrt这样优秀的ssh客户端软件.mac下查找了下,有securecrt mac版,网上也有破解的,试用了一段时间,一个问 ...

  5. hdu3078 伪LCA……

    题意:有 n 点的一颗树,每个节点有格子的权值,现在有两种操作,修改一个点的权值,或者求两点之间的路径上的第 k 大的权值. 其实看到这个题,就在 YY 各种做法,询问后得到貌似可能是关于主席树.树链 ...

  6. 利用OpenMP实现埃拉托斯特尼(Eratosthenes)素数筛法并行化 分类: 算法与数据结构 2015-05-09 12:24 157人阅读 评论(0) 收藏

    1.算法简介 1.1筛法起源 筛法是一种简单检定素数的算法.据说是古希腊的埃拉托斯特尼(Eratosthenes,约公元前274-194年)发明的,又称埃拉托斯特尼筛法(sieve of Eratos ...

  7. ASP.NET SignalR 与 LayIM2.0 配合轻松实现Web聊天室 实战系列(不断更新中)

    项目简介 利用ASP.NET SignalR技术与Layim前端im框架实现的一个简单的web聊天室,包括单聊,群聊,加好友,加群,好友搜索,管理,群组管理,好友权限设置等功能.涉及技术: Elast ...

  8. Node.js网络编程

    Node.js为javascript语言提供了一个在服务端运行的平台,它以其事件驱动,非阻塞I/O机制使得它本身非常适合开发运行在在分布式设备上的I/O密集型应用,分布式应用要求Node.js必须对网 ...

  9. Struts2通配符问题(待解决)

    目录结构如下: 运行结果: 为什么会访问input.jsp?不应该是访问emp-input吗?

  10. MessageBox

    首先要知道MessageBox返回的值为DialogResult类型.返回值可能有如下: DialogResult.OK  //点击“确定”按钮后返回的值 DialogResult.YES  //点击 ...