iOS XcodeGen使用参考

2021-08-08  本文已影响0人  一粒咸瓜子

资料

XcodeGen--Github
Better iOS projects: Getting (nearly) rid of Xcodeproject - A (not so) short Introduction to Xcodegen
Xcodegen构建Xcode Project

痛点

Xcode 使用项目文件 .xcodeproj 文件来捆绑 IDE 的源代码和资源。在大多数情况下是正常工作的,但它有以下几个缺点:

简介

XcodeGen 是一个工具,它允许我们从名为 project.yml 的文件中的定义生成 xcodeproj 文件。由于 xcodeproj 文件可以随时生成,我们甚至不必将它保存在我们的 git 中并且可以忽略它。

两个最重要的功能:

另一种脚本生成 .xcodeproj 的方式是 gem xcodeproj

安装

使用 homebrew 安装

brew install xcodegen

或使用 mint 安装(mint 是一个包管理器

mint install yonaskolb/xcodegen

project.yml

格式

ProjectSpec.md#include

在项目的根目录下创建 project.yml 文件。

cd path/
touch project.yml
open project.yml

文件内容:

name: AppName # 工程名
options: # 项目的一些常规配置
  bundleIdPrefix: com.abc # 假定 BundleID: com.abc.project
  developmentLanguage: zh-Hans # 可选
settings:
  DEVELOPMENT_TEAM: ASJDAJS  # 需要去 developer.apple.com 后台获取
# 上面是 PROJECT 文件中的配置
# 下面是 TARGETS 文件中的配置
targets: 
  AppName:
    type: application
    platform: iOS
    deploymentTarget: "10.3"
    sources:
     #Sources
      - subModule # 可选,如果项目有其他 module:例如 FileUpload-iOS/FileUpload
      - path: AppName # 主项目
    dependencies: # 可选,如果项目依赖某些静态库,如果依赖某些动态库 例如 NetworkExtension,方法见下
      - framework: AppName/apath/bpath/cpath/xxx.framework
      - sdk: CoreData.framework # 动态库可使用 sdk 类型添加
      - sdk: libsqlite3.tbd
    settings:
        INFOPLIST_FILE: AppName/apath/Info.plist # 生成 info.plist
        GCC_PREFIX_HEADER: AppName/apath/PrefixHeader.pch # pch 文件路径
        # OTHER_LDFLAGS: "$(inherited) -framework CoreData" # 可选, 如果 "sdk:" 方式无法添加动态库 可尝试这种方式
        PRODUCT_BUNDLE_IDENTIFIER: M.Practice
        

问题

git rm /path/Practice/Practice.xcodeproj/project.pbxproj 

解决方法:目前先放着不管,因为解决办法全是基于修改.xcodeproj的,xcodegen每次重新生成文件,修改就会被重置掉。
https://github.com/CocoaPods/CocoaPods/issues/8494

解决办法:


解决办法:一定要 project.yml 文件中各项的对齐情况,十分严格

生成 TestTargets

如果原项目包含 Tests 和 UI Tests,可以在 project.yml 文件中添加 target

  XcodegenApp-iOS-Tests:
    type: bundle.unit-test
    platform: iOS
    deploymentTarget: "10.3"
    sources:
      - path: XcodegenAppTests
    dependencies:
      - target: XcodegenApp

 XcodegenApp-iOS-UITests:
    type: bundle.ui-testing
    platform: iOS
    sources:
      - path: XcodegenAppUITests
    dependencies:
      - target: XcodegenApp

用法

回到终端,在项目根目录下输入命令 xcodegen 并回车。

options:

优化脚本:

vim setup.sh
i
xcodegen && pod update --no-repo-update
esc
:wq

执行脚本:

sh setup.sh

增加忽略

git rm /path/Practice/Practice.xcodeproj/project.pbxproj 
*.xcworkspace
*.xcodeproj
.DS_Store

模板

name: Practice
options:
  bundleIdPrefix: "M"
  developmentLanguage: en
settings:
  DEVELOPMENT_TEAM: T265XVEUYV
targets:
  Practice:
    type: application
    platform: iOS
    deploymentTarget: "13.0"
    sources:
      - path: Practice
        excludes:
          - "MyFrameW.framework"
    dependencies:
      - framework: Practice/MyFrameW.framework
      - sdk: CoreData.framework
      - sdk: libsqlite3.tbd
      - sdk: NetworkExtension.framework
    settings:
        INFOPLIST_FILE: Practice/Info.plist
        GCC_PREFIX_HEADER: Practice/PrefixHeader.pch
        PRODUCT_BUNDLE_IDENTIFIER: M.Practice
    scheme:
        disableMainThreadChecker: true

上一篇 下一篇

猜你喜欢

热点阅读