已通过 uapp add ios 创建工程
代码发布位置: https://gitee.com/uappkit/platform
此工程将存档,不再维护,未来将移除。
iOS 的工程化一直都不太方便,通常都是用的 CocoaPods,但不适合DCloud 离线SDK 的发布形式。经过我们在产品中的不断实践,最终选择了 XCodeGen。
工程目录结构
.
├── Main
│ ├── App-Prefix.pch
│ ├── AppDelegate.h
│ ├── AppDelegate.m
│ ├── Pandora
│ ├── Resources
│ ├── ViewController.h
│ ├── ViewController.m
│ └── main.m
├── README.md
├── SDKs # gitignore, 存放官方发布离线打包的SDK,或其他依赖的SDK, Libs等
│ ├── DouyinPlugin # 参照示例,第三方插件
│ ├── FFMpegPlugin # 参照示例,定制插件
│ ├── README.md
│ ├── SDK -> $HOME/.uappsdk/ios/SDK # 软连接: ln -sf $HOME/.uappsdk/ios/SDK SDK
│ └── ijkplayer -> $HOME/.uappsdk/ios/ijkplayer
├── config
│ ├── base.yml
│ ├── custom.yml
│ ├── uapp_dev.yml
│ └── uapp_release.yml
├── manifest.json # 指向 HBuilderX 工程里 manifest.json 的软连接
├── out # gitignore, `uapp publish debug` 生成打包基座,并同步给 HBuilderX
│ └── uapp_debug.xcarchive
├── project.yml
└── uapp.xcodeproj
git clone https://github.com/uappkit/uapp-ios.git
# 创建 SDK 软连接
cd uapp-ios
ln -sf $HOME/.uappsdk/ios/SDK SDKs/SDK
xcodegen 是用来生成 xcode 工程文件的,使用 xcodegen 便于维护,自动化集成。
通过 brew 安装
brew install xcodegen
通过 Make 安装
git clone https://github.com/yonaskolb/XcodeGen.git
cd XcodeGen
make install
uapp 工程配置通过 xcodegen 来维护,配置文件结构如下:
.
├── project.yml # xcodegen 配置文件入口
└── config
├── base.yml # 基础配置,不建议修改
├── custom.yml # 自定义配置,可以添加修改
├── uapp_dev.yml # 用于 uapp-dev 开发阶段的配置
└── uapp_release.yml # 用于 uapp-release 正式发布的配置
不要直接修改工程文件,第一次使用,或者修改 xcodegen 配置后,一定要执行:
xcodegen
会重新生成 xcode 的工程文件 uapp.xcodeproj
。如果一定要修改工程文件,那就记住不要再使用 xcodegen 命令了,否则工程文件的修改都会被覆盖掉。
命令行可通过 open uapp.xcodeproj
打开 xcode 工程。
apple IAP 内购出错:
- SDK/Bundles/PandoraApi.bundle/feature.plist, Payment 添加
appleiap: PGPlatbyIAP
1、获取到 team_id, client_id, key_id 填入到 jwt/config.json 中,如下:
{
"team_id": "3DSM494K6L",
"client_id": "com.code0xff.uapp.login",
"key_id": "3C7FMSZC8Z"
}
2、登录苹果开发者账号,创建并下载签名文件, 改名为jwt/key.txt。
3、运行 uapp info
命令查看 JWT Token
详细教程可参考: http://help.jwt.code0xff.com
工程内包含其他子工程的,可以参照 IJKMediaPlayer 配置
projectReferences dependencies 官方用 target:
- target: IJKMediaPlayer/IJKMediaFrameworkWithSSL
embed: true
但这么用会出现一个 BUG, 当 targets 为多个时, 比如这里的 uapp-dev / uapp-release 两个时会出现 bug,修改 xcode 工程时会丢失这个引用。
看这里也有人反馈过,但貌似都没解决:yonaskolb/XcodeGen#933
经过摸索, 可以通过配置 framework + implicit: true
解决, 如下:
- framework: IJKMediaFrameworkWithSSL.framework
implicit: true
embed: true
The Apache License 2. Please see License File for more information.