iOS 使用 fastlane 打包
在一款 App 从开发到上架都会经历 编译 -> 打包 -> 签名 -> 推送 App Store Connect -> 提审 -> 上架
的过程。其中编译打包这种重复且繁琐的工作公司内都会有一个 CI 平台去负责,我们今天就来了解一下 CI 的编译打包流程是怎样的。
在一款 App 从开发到上架都会经历 编译 -> 打包 -> 签名 -> 推送 App Store Connect -> 提审 -> 上架
的过程。其中编译打包这种重复且繁琐的工作公司内都会有一个 CI 平台去负责,我们今天就来了解一下 CI 的编译打包流程是怎样的。
首先保证硬盘空间足够,本人一套流程下来文件夹有将近 60GB 大小。接下来是相关环境的安装,因为我的环境都是最新的,所以基本安装的都是最新版的包,如果你的环境不是新版的话,请找对应版本包安装。本人环境说明:
名称 | 版本 |
---|---|
芯片 | Apple M2 Pro |
macOS | Ventura 13.3 |
Python | 3.11.2 |
CMake | 3.26.3 |
ninja | 1.11.1 |
sccache | 0.4.1 |
Xcode | 14.3 |
我们可以通过 homebrew
统一安装环境:
1 | $ brew install cmake ninja sccache |
此文只介绍 Xcode 调试环境,如果想用 VS Code 调试的话,需要用 Ninja 编译,Ninja 的编译请移步官方文档。
ProvisionQL 是一款支持快速预览 ipa
和 provision
等文件信息的插件。它能以美观整洁的页面快速预览大量信息,包括设备 UUID、证书、授权等等。
截图示例如下:
此插件支持的文件类型有:
.ipa
- iOS 的打包应用.xcarchive
- Xcode archive.appex
- iOS/OSX 应用扩展.mobileprovision
- iOS provisioning profile.provisionprofile
- OSX provisioning profile之前的文章介绍过,字符串是以空字符(\0)结尾的char
类型数组。常用的输出字符串的方式有两种 printf()
和puts()
,他们不同之处在于,printf()
是格式化输出字符串,而puts()
只显示字符串。
用双引号括起来的内容称为字符串字面量,也叫字符串常量。字符串常量属于静态存储类别,这说明如果在函数中使用字符串常量,该字符串只会被存储一次,在整个程序的生命期内存在,即使函数被调用多次。用双引号括起来的内容被视为指向该字符串存储位置的指针。这类似于把数组名作为指向该数组位置的指针。如果确实如此,下面的程序会输出什么?
1 | #include <stdio.h> |
输出如下:
1 | we, 0x100003fa7, s |
macOS 上的 Ruby 环境管理我相信是大多数软件开发都会遇到的一个问题,如果我们需要同时管理多个 Ruby 版本的话,有 rbenv
和 rvm
的方式,具体的操作网上已有大量的文章供我们学习,本文不再做赘述。今天我们来看一下如何使用 Homebrew
来管理我们的 Ruby。
什么情况下我们可以使用 Homebrew
来管理我们的 Ruby 环境?
在使用之前,首先我们需要知道用 Homebrew
来管理 Ruby 有什么缺点。
Homebrew
包时,Homebrew 可能会将 Ruby 更新到新版本如果你的需求不满足上述描述的话,特别是需要经常切换 Ruby 版本,那么 Homebrew
的方式就不是太适合。
由于网络问题,我们在使用 Xcode SPM 管理项目依赖库的时候,clone
依赖库那速度真的是拉的一泻千里💩。所以我们需要将 SPM 下载依赖库的过程交给我们的代理去处理。首先你需要一个科学上网工具,无论是客户端还是路由器刷机,此文章的例子都是基于本人网络环境 Surge
,其他的代理方式需自行研究。
指针?什么是指针?从根本上看,指针(pointer)是一个值为内存地址的变量(或数据对象)。正如char
类型变量的值是字符,int
类型变量的值是整数,指针变量的值是地址。在 C 语言中,指针有许多用法。本章将介绍如何把指针作为函数参数使用,以及为何要这样用。
假设一个指针变量名是ptr
,可以编写如下语句:
1 | ptr = &pooh; // 把 pooh 的地址赋给 ptr |
对于这条语句,我们说ptr
“指向”pooh
。ptr
和&pooh
的区别是ptr
是变量,而&pooh
是常量。或者,ptr
是可修改的左值,而&pooh
是右值。还可以把ptr
指向别处:
1 | ptr = &bah; // 把 ptr 指向 bah,而不是 pooh |
现在ptr
的值是bah
的地址。
要创建指针变量,先要声明指针变量的类型。假设想把ptr
声明为储存int
类型变量地址的指针,就要使用下面介绍的新运算符。
C 有一系列专门处理字符的函数,ctype.h
头文件包含了这些函数的原型。这些函数接受一个字符作为参数,如果该字符属于某特殊的类别,就返回一个非零值(真);否则,返回口(假)。例如,如果 isalpha()
函数的参数是一个字母,则返回一个非零值。
1 | // cypher2.c -- 替换输入的字母,非字母字符保持不变 |
在 C 语言中,一直用 int
类型的变量表示 真/假
值。C99 专门针对这种类型的变量新增了 _Bool
类型。该类型是以英国数学家 George Boole 的名字命名的,他开发了用代数表示逻辑和解决逻辑问题。在编程中,表示真或假的变量被称为布尔变量(Boolean variable),所以日 _Bool
是 C 语言中布尔变量的类型名。_Bool
类型的变量只能储存 1(真)
或 0(假)
。如果把其他非零数值赋给 _Bool
类型的变量,该变量会被设置为 1
。这反映了 C 把所有的非零值都视为真。