1. fastlane
a collection of tools that help you automate building and releasing iOS and Android apps。用中文说,就是用来构建打包的工具。可支持iOS和Android操作系统。fastlane是用Ruby语言编写的一套自动化工具集和框架,每一个工具实际都对应一个Ruby脚本,用来执行某一个特定的任务,而fastlance核心框架则允许使用者通过类似配置文件的形式,将不同的工具结合在一起,从而形成一个个完整的自动化流程。
详细内容可看:自动化打包之Fastlane https://blog.csdn.net/kuangdacaikuang/article/details/80443515 。
举例:
desc "Build beta package and upload to xx.com"
#lane表示一个打包流程 例子中,此流程名叫build_for_beta。假设我们的App名叫myApp lane :build_for_beta do update_info_plist( plist_path: "myApp/Info.plist", display_name: "myApp_test" ) #设置plist中key1值为value1 set_info_plist_value(path: "./myApp/Info.plist", key: "key1", value: "value1") version_number = get_version_number( xcodeproj: "./myApp.xcodeproj" ) # 打完包的产物都会以这个参数命名 myApp_archive_name = "myApp_v#{version_number}_beta" end
2. info.plist
info.plist是应用app的配置文件,可以在此定义Bundle的版本号CFBundleShortVersionString,应用程序版本号CFBundleVersion,应用名称CFBundleDisplayName,启动图标CFBundleIcons,应用标识号CFBundleIdentifier,是否支持后台运行UIApplicationExitsOnSuspend,需要的权限等。以下info.plist里定义的app名叫:myApp,版本为5.1.0-300
<?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>CFBundleDevelopmentRegion</key> <string>zh_CN</string> <key>CFBundleDisplayName</key> <string>myApp</string> <key>CFBundleIdentifier</key> <string>$(PRODUCT_BUNDLE_IDENTIFIER)</string> <key>CFBundleName</key> <string>$(PRODUCT_NAME)</string> <key>CFBundleShortVersionString</key> <string>5.1.0</string> <key>CFBundleVersion</key> <string>300</string> <key>DEBUG</key> <integer>1</integer> <key>NSAppleMusicUsageDescription</key> <string>是否允许访问媒体资料库?</string> <key>NSBluetoothPeripheralUsageDescription</key> <string>是否允许访问蓝牙?</string> </dict> </plist>
3. /usr/libexec/Plistbuddy
plist是Mac种非常普遍的一种文件格式,类似xml,通过键值对的方式来进行一些配置。而PlistBuddy则是Mac自带的专门解析plist的小工具详情可参见:https://www.jianshu.com/p/2167f755c47e
使用plistbuddy输出及修改版本号,命令如下:
buildnum=$(/usr/libexec/PlistBuddy -c "Print CFBundleVersion" "${plist}") buildnum=$(expr $buildnum + 1) /usr/libexec/Plistbuddy -c "Set CFBundleVersion $buildnum" "${plist}"
4. rvm
rvm是一个命令行工具,可以提供一个便捷的多版本Ruby环境管理和切换。
5. gem
gem是管理ruby程序的程序,类似python下的pip 或 Node.js 里的npm。
gemfile里定义应用依赖的第三方包,bundle根据该配置寻找这些包。
6. brew
homebrew简称brew,是Mac OSX上的软件包管理工具,类似linux里的apt-get / yum等。常用命令有:
brew update #更新homebrew的信息 brew outdated #查看需要升级的软件 brew upgrade xxx #指定升级某软件 brew upgrade #升级所有软件 brew cleanup
7. bundler & bundle
bundler是管理多版本gem的工具。bundle文件可以理解为资源文件包。我们将许多图片、文本文件组织在一起,打包成一个bundle文件,方便在其他项目中引用包内的资源。bundle是静态的,不参加项目编译,不包含可执行文件。
8. agvtool
版本和内部版本号码Key
分别指定市场和应用程序的内部版本。agvtool是一个命令行工具,它允许你这些数字自动递增到下一个最高号码或特定号码。更新及查看版本号命令为:
agvtool new-marketing-version <your_specific_version>
agvtool what-marketing-version
// build
agvtool new-version -all 1.0.0
agvtool what-version
9. pod & CocoPods
- pod是用来管理iOS库的工具。
- CocoaPods是一个objc的依赖管理工具,而其本身是利用ruby的依赖管理gem进行构建的。通过CocoaPods我们可以为项目添加被称为“Pods”的依赖库(这些类库必须是CocoaPods本身所支持的),并且可以轻松管理其版本。
- podfile是一个规范文件,描述一个或多个项目目标依赖项。
- podfile.lock 文件是记录使用的第三方的版本号(只记录最后一次更新),在执行完pod install / update 后生成
5. 命令 pod install
- 如果 podfile.lock 文件不存在,会根据 podfile 文件安装第三方框架,并生成 podfile.lock 文件
- 如果 podfile.lock 文件存在,会根据 podfile.lock 文件的版本号来安装第三方框架,即便服务器中有最新的版本,通过 pod install 指令也不会安装最新的第三方框架,只会根据 podfile.lock 中记录的版本来安装
- 使用场景:
- 新创建工程,第一次引入pod库时。
- 修改了Podfile文件,添加或删除了所依赖的pod库时。
- 团队中新人拉取工程后获取pod库时。
- 团队中,不同开发者要同步对pod库的依赖时。
- 有人改变了依赖关系,删除或增加pod时。
- 有人执行了pod update,此时他的Podfile.lock文件中的跟踪版本就已经变更,此时,其他人只要pod install就能更新为和Podfile.lock文件中的版本。
- 如果Podfile和Podfile.lock的记录相冲突,Podfile文件中指定了低于Podfile.lock中记录的版本。会以Podfile文件为准,并在获取成功后更新Podfile.lock文件。
6. 命令 pod update
- 根据 podfile 文件安装第三方框架,将所有第三方框架更新到最新版本,并且创建一个 podfile.lock 文件覆盖掉原文件
10. Provisioning Profile
为了使测试版应用可以在真机上安装,我们就需要使用 Provisioning Profiles。