内容简介:-
大家好,我是泰戈尔,一个集美貌与智慧于一身的美男子。今天继续由我为大家分享的主题是使用 xcodegen 管理 iOS 项目,从此摆脱 xcodeproject 的冲突。
本文我们将介绍如果通过使用 xcodegen
,来更有效地来管理 iOS .xcodeproj
文件。
那么问题来了,为什么我们要使用 xcodegen,.xcodeprojects 到底有什么问题呢?
Xcode 使用项目文件 .xcodeproj
文件来捆绑 IDE 的源代码和资源。在大多数情况下都能良好的工作,但是有时候它会暴露出一些缺点来:
-
在不同的分支上添加了源码文件或资源后无法确定文件是否正确,虽然说你可以手动去解决
.xcodeproj
文件中的合并冲突。 -
如果想要同步电脑上的文件夹结构或者项目中的
group
结构,我们往往是通过人工手动来决定,这就难免会造成混淆。幸运的是已经有 工具 可以来解决这个问题了,比如synx
或xcodeproj gem
的 排序 功能。 -
Xcode 只会在编译后才会提示你项目中存在文件的丢失。
-
编写依赖关系并构建多个目标的脚本可能会变得非常麻烦。
xcodegen 简介
xcodegen
是一个工具,它允许我们从名为 project.yml
的文件中的定义生成 xcodeproj
文件。由于 xcodeproj
文件可以随时生成,我们甚至不必将它保存在我们的 git
中并且可以忽略它。
以下是 xcodegen
的两个最重要的功能:
-
可以通过这种方式为各种平台(iOS,tvOS,macOS,watchOS)定义各种 Xcode target(application,frameworks 等)。
-
它还允许将源文件的文件夹连接到目标,从而更容易管理哪些源代码文件包含在哪个目标中。
虽然 xcodegen
是一个刚出来不久的项目,但它已经可以做很多事了。接下来就让我们来体验 xcodegen
带来的快感吧~
安装 xcodegen
通过 homebrew
安装 xcodegen
brew install xcodegen
生成 APP 项目工程
首先,使用 Xcode 创建一个 Single View App
iOS 应用程序,以便获得项目起初所有必需的 .m
, .xcassets
等文件。
现在我们通过使用 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
然后,重命名现有的 .xcodeproj
(稍后我们可以用它来对比通过 xcodegen
生成的工程的效果是否一样)。
接着回到终端,并在项目根目录下输入命令 xcodegen
并回车:
然后回到工程目录,打开刚生成的 XcodegenTest.xcodeproj
文件,见证奇迹的时刻到了~,跑起来~ cmd + run
运行项目。“Ah, Build Successed” !,一切都跟之前 xcode 生成的 .xcodeproj
一样~
生成 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 ~,一切尽在掌控之中~”。
添加 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
,其中包含经典的动物种类:
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
获取 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
获取 Demo
使用依赖管理工具
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.yml
的 XcodegenTest
target 依赖中添加一下内容:
- carthage: Toast
6)关闭 Xcode ,并在命令行中执行 xcodegen
命令,打开项目,并输入如下代码,最后编译并运行项目,一切正常,完美~
#import <Toast/Toast.h> [self.view makeToast:@"Hello iOS Trick" duration:1 position:CSToastPositionCenter];
图 Carthage 依赖运行效果
如上, xcodegen
的一些基本用法就介绍到这了,当然 xcodegen
的功能远远不止这些,如果对 xcodegen
的更多内容感兴趣,请关注我们的公众号 iOS 开发技术栈
,后面我们也会分享 xcodegen
的其他用法,敬请期待~
- END -
热文推荐
·END·
iOS开发技术栈
分享 iOS 开发中实用奇技淫巧
微信号:iOS_Trick
关注 "iOS开发技术栈" ,看奇技淫巧
以上所述就是小编给大家介绍的《使用 xcodegen 管理 iOS 项目,从此摆脱 xcodeproject 的冲突》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!
猜你喜欢:- 如何摆脱 “技术思维” 的惯性?
- matlab – 摆脱图中的“图1”
- 摆脱redux繁琐操作,搭建mobx框架
- javascript – 摆脱SVG循环元素上的别名
- Azure中继摆脱了WCF的桎梏,走向跨平台
- Azure中继摆脱了WCF的桎梏,走向跨平台
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
Spring揭秘
王福强 / 人民邮电出版社 / 2009.8 / 99.00元
没有教程似的训导,更多的是说故事般的娓娓道来,本书是作者在多年的工作中积累的第一手Spring框架使用经验的总结,深入剖析了Spring框架各个模块的功能、出现的背景、设计理念和设计原理,揭开了Spring框架的神秘面纱,使你“知其然,更知其所以然”。每部分的扩展篇帮助读者活学活用Spring框架的方方面面,同时可以触类旁通,衍生出新的思路和解决方案。 本书内容全面,论述深刻入理,必将成为每......一起来看看 《Spring揭秘》 这本书的介绍吧!