使用 xcodegen 管理 iOS 项目,从此摆脱 xcodeproject 的冲突

栏目: 编程工具 · IOS · 发布时间: 5年前

内容简介:-
使用 xcodegen 管理 iOS 项目,从此摆脱 xcodeproject 的冲突 使用 xcodegen 管理 iOS 项目,从此摆脱 xcodeproject 的冲突

使用 xcodegen 管理 iOS 项目,从此摆脱 xcodeproject 的冲突

"今天是新的一天,朕又打下了一片姜山!"

使用 xcodegen 管理 iOS 项目,从此摆脱 xcodeproject 的冲突

大家好,我是泰戈尔,一个集美貌与智慧于一身的美男子。今天继续由我为大家分享的主题是使用 xcodegen 管理 iOS 项目,从此摆脱 xcodeproject 的冲突。

本文我们将介绍如果通过使用 xcodegen ,来更有效地来管理 iOS .xcodeproj 文件。

那么问题来了,为什么我们要使用  xcodegen,.xcodeprojects 到底有什么问题呢?

Xcode 使用项目文件 .xcodeproj 文件来捆绑 IDE 的源代码和资源。在大多数情况下都能良好的工作,但是有时候它会暴露出一些缺点来:

  1. 在不同的分支上添加了源码文件或资源后无法确定文件是否正确,虽然说你可以手动去解决 .xcodeproj 文件中的合并冲突。

  2. 如果想要同步电脑上的文件夹结构或者项目中的 group 结构,我们往往是通过人工手动来决定,这就难免会造成混淆。幸运的是已经有 工具 可以来解决这个问题了,比如 synx xcodeproj gem 排序 功能。

  3. Xcode 只会在编译后才会提示你项目中存在文件的丢失。

  4. 编写依赖关系并构建多个目标的脚本可能会变得非常麻烦。

xcodegen 简介

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

以下是 xcodegen 的两个最重要的功能:

  1. 可以通过这种方式为各种平台(iOS,tvOS,macOS,watchOS)定义各种 Xcode target(application,frameworks 等)。

  2. 它还允许将源文件的文件夹连接到目标,从而更容易管理哪些源代码文件包含在哪个目标中。

虽然 xcodegen 是一个刚出来不久的项目,但它已经可以做很多事了。接下来就让我们来体验 xcodegen 带来的快感吧~

安装  xcodegen

通过 homebrew 安装 xcodegen

brew install xcodegen

生成 APP 项目工程

首先,使用 Xcode 创建一个 Single View App iOS 应用程序,以便获得项目起初所有必需的 .m .xcassets 等文件。

使用 xcodegen 管理 iOS 项目,从此摆脱 xcodeproject 的冲突

现在我们通过使用 project.yml 文件来重新创建项目, 关闭 Xcode 并在根目录中创建一个 project.yml 文件,输入以下内容:

name: XcodegenTest # The name of the App
options: # Some general settings for the project
  createIntermediateGroups: true # If the folders are nested, also nest the groups in Xcode
  indentWidth: 2 # indent by 2 spaces
  tabWidth: 2 # a tab is 2 spaces
  bundleIdPrefix: "de.number42"
targets: # The List of our targets
  XcodegenTest:
    type: application
    platform: iOS
    deploymentTarget: "10.3"
    sources:
      #Sources
      - path: XcodegenTest

使用 xcodegen 管理 iOS 项目,从此摆脱 xcodeproject 的冲突

然后,重命名现有的 .xcodeproj (稍后我们可以用它来对比通过 xcodegen 生成的工程的效果是否一样)。

使用 xcodegen 管理 iOS 项目,从此摆脱 xcodeproject 的冲突

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

使用 xcodegen 管理 iOS 项目,从此摆脱 xcodeproject 的冲突

然后回到工程目录,打开刚生成的 XcodegenTest.xcodeproj 文件,见证奇迹的时刻到了~,跑起来~ cmd + run 运行项目。“Ah, Build Successed” !,一切都跟之前 xcode 生成的 .xcodeproj 一样~

使用 xcodegen 管理 iOS 项目,从此摆脱 xcodeproject 的冲突

使用 xcodegen 管理 iOS 项目,从此摆脱 xcodeproject 的冲突

使用 xcodegen 管理 iOS 项目,从此摆脱 xcodeproject 的冲突

使用 xcodegen 管理 iOS 项目,从此摆脱 xcodeproject 的冲突

生成 TestTargets

project.yml 文件中添加如下代码:

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

同样的先关闭 Xcode( Xcode 比较怪,如果在项目文件打开时去更改项目文件可能就会出现莫名其秒的错误),在命令行输入 xcodegen 重新生成 .xcodeproj 文件,然后打开工程,“看吧,你要的 TestTargets 出来了”,接着 cmd + u 跑来来。“Ah, Build Successed ~,一切尽在掌控之中~”。

使用 xcodegen 管理 iOS 项目,从此摆脱 xcodeproject 的冲突

添加 UI Tests 跟上面的操作一样,同样地在 project.yml 文件中添加如下代码,然后关闭 xcode, 重新生成 .xcodeproj

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

如上,就是通过 xcodegem 来生成 TestTargets 的过程~

生成 Framework 工程

在 Xcode 中维护子模块总是有点麻烦。使用 xcodegen 可以轻松将模块化引入您的应用程序。

接下来我们将介绍如何做到这一点,创建一个 XcodegenAppFramework ,其中包含经典的动物种类:

1)在根目录下创建 XcodegenAppFramework

目录

2)创建

Animal .h/.m ,添加如下内容

//Animal.h

#import <Foundation/Foundation.h>

@interface Animal : NSObject

+ (void)sayHellow;

+ (NSString *)helloTipTrick;

@end

//Animal.m

#import "Animal.h"

#import <Foundation/Foundation.h>

@implementation Animal

+ (void)sayHellow {

NSLog(@"Hello iOS Trick");

}

+ (NSString *)helloTipTrick {

return @"关注 \"iOS开发技术栈\" ,看奇技淫巧";

}

@end

3)在 XcodegenAppFramework 目录下添加 Info.plist 文件,并输入相应内容。

:warning::由于 Info.plist   文件内容过长,在此就不列出该文件的内容了,完整的   Info.plist   内容可以关注微信公众号 “ iOS 开发技术栈” 回复关键字   xcodegen   获得。

使用 xcodegen 管理 iOS 项目,从此摆脱 xcodeproject 的冲突 扫码关注公众号后,回复关键字   xcodegen   获取 Demo

4)为 XcodegenAppFramework 添加 project.yml

XcodegenAppFramework:
  type: framework
  platform: iOS
  deploymentTarget: "10.3"
  sources:
    - path: XcodegenAppFramework

5)为 XcodegenTest 添加依赖

dependencies:
    - target: XcodegenAppFramework

关闭 xcode,回到命令行重新输入 xcodegen 回车,重新生成 .xcodeproj ,“Build Successed~”,但是等等,到目前为止,什么也没发生?

ok,接下来让我们来看看能否跟平常一样使用 XcodegenAppFramework

6)导入 XcodegenAppFramework ,在 ViewController 类中添加如下代码:

#import <XcodegenAppFramework/Animal.h>

- (void)viewDidLoad {
  [super viewDidLoad];

  [Animal sayHellow];
  self.messageLabel.text = [Animal helloTipTrick];
}

接着 CMD + R 让 Demo 跑起来,一切竟然都跟以前的方式一样~

:warning::由于 project.yml   文件内容过长,在此就不列出该文件的内容了,完整的   project.yml   内容可以关注微信公众号 “ iOS 开发技术栈” 回复关键字   xcodegen   获得。

使用 xcodegen 管理 iOS 项目,从此摆脱 xcodeproject 的冲突 扫码关注公众号后,回复关键字   xcodegen   获取 Demo
使用 xcodegen 管理 iOS 项目,从此摆脱 xcodeproject 的冲突 郝林是「Go并发编程实战」一书的作者,Go语言爱好者和布道者,多年来一直帮助 Go 语言在中国落地,他的书籍和分享也影响无数的技术人。如果读者对 Go 语言 感兴趣,不妨扫码购买一睹究竟。

使用依赖管理工具

xcodegen   可以为每个 target 声明一个或多个依赖项。

Cocoapods

就跟平时使用 podfile 一样。在 project.yml 中不需要引用pod本身。使用 xcodegen 生成项目后,只需运行 pod install,它将自动把项目集成并创建 workspace。

Carthage

xcodegen 让 Carthage 依赖集成变得非常简单!

只需在 target 中引用它们, xcodegen 会在必要时自动链接和嵌入 Carthage frameworks 来完成剩下的工作。下面我们将会通过 Carthage 导入 Toast 依赖来演示这个操作:

1)安装 carthage

brew install carthage

2)创建一个 Cartfile 文件

3)添加以下内容

github "scalessec/Toast" ~> 4.0.0

4)carthage update --platform iOS

5)在 project.ymlXcodegenTest target 依赖中添加一下内容:

- carthage: Toast

6)关闭 Xcode ,并在命令行中执行 xcodegen 命令,打开项目,并输入如下代码,最后编译并运行项目,一切正常,完美~

#import <Toast/Toast.h>

[self.view makeToast:@"Hello iOS Trick" duration:1 position:CSToastPositionCenter];

图 Carthage 依赖运行效果

使用 xcodegen 管理 iOS 项目,从此摆脱 xcodeproject 的冲突

如上, xcodegen 的一些基本用法就介绍到这了,当然 xcodegen 的功能远远不止这些,如果对 xcodegen 的更多内容感兴趣,请关注我们的公众号 iOS 开发技术栈 ,后面我们也会分享 xcodegen 的其他用法,敬请期待~

END  -

·END·

iOS开发技术栈

分享 iOS 开发中实用奇技淫巧

微信号:iOS_Trick 

关注 "iOS开发技术栈" ,看奇技淫巧


以上所述就是小编给大家介绍的《使用 xcodegen 管理 iOS 项目,从此摆脱 xcodeproject 的冲突》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

The Effective Engineer

The Effective Engineer

Edmond Lau / The Effective Bookshelf, Palo Alto, CA. / 2015-3-19 / USD 39.00

Introducing The Effective Engineer — the only book designed specifically for today's software engineers, based on extensive interviews with engineering leaders at top tech companies, and packed with h......一起来看看 《The Effective Engineer》 这本书的介绍吧!

RGB转16进制工具
RGB转16进制工具

RGB HEX 互转工具

UNIX 时间戳转换
UNIX 时间戳转换

UNIX 时间戳转换

HEX HSV 转换工具
HEX HSV 转换工具

HEX HSV 互换工具