轩辕十四

探索科技与创新的个人博客

在一款 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 是一款支持快速预览 ipaprovision 等文件信息的插件。它能以美观整洁的页面快速预览大量信息,包括设备 UUID、证书、授权等等。

截图示例如下:

此插件支持的文件类型有:

  • .ipa - iOS 的打包应用
  • .xcarchive - Xcode archive
  • .appex - iOS/OSX 应用扩展
  • .mobileprovision - iOS provisioning profile
  • .provisionprofile - OSX provisioning profile
阅读全文 »

之前的文章介绍过,字符串是以空字符(\0)结尾的char类型数组。常用的输出字符串的方式有两种 printf()puts(),他们不同之处在于,printf()是格式化输出字符串,而puts()只显示字符串。

在程序中定义字符串

用双引号括起来的内容称为字符串字面量,也叫字符串常量。字符串常量属于静态存储类别,这说明如果在函数中使用字符串常量,该字符串只会被存储一次,在整个程序的生命期内存在,即使函数被调用多次。用双引号括起来的内容被视为指向该字符串存储位置的指针。这类似于把数组名作为指向该数组位置的指针。如果确实如此,下面的程序会输出什么?

1
2
3
4
5
6
#include <stdio.h>

int main(void) {
printf("%s, %p, %c\n", "we", "are", *"space farers");
return 0;
}

输出如下:

1
we, 0x100003fa7, s
阅读全文 »

macOS 上的 Ruby 环境管理我相信是大多数软件开发都会遇到的一个问题,如果我们需要同时管理多个 Ruby 版本的话,有 rbenvrvm 的方式,具体的操作网上已有大量的文章供我们学习,本文不再做赘述。今天我们来看一下如何使用 Homebrew 来管理我们的 Ruby。

什么情况下我们可以使用 Homebrew 来管理我们的 Ruby 环境?

  • 你只是学习一下 Ruby 语言
  • 你只是想编译一个项目(例如我们使用 cocoapods 来管理我们的项目)

在使用之前,首先我们需要知道用 Homebrew 来管理 Ruby 有什么缺点。

  • 当你升级其他 Homebrew 包时,Homebrew 可能会将 Ruby 更新到新版本
  • 你不能非常轻松的在多个 Ruby 版本之间频繁切换

如果你的需求不满足上述描述的话,特别是需要经常切换 Ruby 版本,那么 Homebrew 的方式就不是太适合。

阅读全文 »

由于网络问题,我们在使用 Xcode SPM 管理项目依赖库的时候,clone依赖库那速度真的是拉的一泻千里💩。所以我们需要将 SPM 下载依赖库的过程交给我们的代理去处理。首先你需要一个科学上网工具,无论是客户端还是路由器刷机,此文章的例子都是基于本人网络环境 Surge,其他的代理方式需自行研究。

阅读全文 »

指针简介

指针?什么是指针?从根本上看,指针(pointer)是一个值为内存地址的变量(或数据对象)。正如char类型变量的值是字符,int类型变量的值是整数,指针变量的值是地址。在 C 语言中,指针有许多用法。本章将介绍如何把指针作为函数参数使用,以及为何要这样用。

假设一个指针变量名是ptr,可以编写如下语句:

1
ptr = &pooh; // 把 pooh 的地址赋给 ptr

对于这条语句,我们说ptr“指向”poohptr&pooh的区别是ptr是变量,而&pooh是常量。或者,ptr是可修改的左值,而&pooh是右值。还可以把ptr指向别处:

1
ptr = &bah; // 把 ptr 指向 bah,而不是 pooh

现在ptr的值是bah的地址。

要创建指针变量,先要声明指针变量的类型。假设想把ptr声明为储存int类型变量地址的指针,就要使用下面介绍的新运算符。

阅读全文 »

C 有一系列专门处理字符的函数,ctype.h 头文件包含了这些函数的原型。这些函数接受一个字符作为参数,如果该字符属于某特殊的类别,就返回一个非零值(真);否则,返回口(假)。例如,如果 isalpha() 函数的参数是一个字母,则返回一个非零值。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
// cypher2.c -- 替换输入的字母,非字母字符保持不变
#include <stdio.h>
#include <ctype.h> // 包含isalpha()的函数原型
int main (void) {
char ch;
while ((ch = getchar()) != '\n') {
if (isalpha(ch)) // 如果是一个宇字符,
putchar(ch + 1); // 显示该字符的下一个字符
else // 否则,
putchar(ch); // 原样显示
}
putchar(ch); // 显示换行符
return 0;
}
阅读全文 »

在 C 语言中,一直用 int 类型的变量表示 真/假 值。C99 专门针对这种类型的变量新增了 _Bool 类型。该类型是以英国数学家 George Boole 的名字命名的,他开发了用代数表示逻辑和解决逻辑问题。在编程中,表示真或假的变量被称为布尔变量(Boolean variable),所以日 _Bool 是 C 语言中布尔变量的类型名。_Bool 类型的变量只能储存 1(真)0(假)。如果把其他非零数值赋给 _Bool 类型的变量,该变量会被设置为 1。这反映了 C 把所有的非零值都视为真

阅读全文 »
0%