测试已测试 | ✗ |
语言编程语言 | Obj-CObjective C |
许可证 | MIT |
发布上次发布 | 2018年3月 |
由Krzysztof Zablocki,Krzysztof Zabłocki维护。
您是如何配置iOS项目的?
由于我们将进入2015年,我正在刷新我的项目启动器。我决定开源,以便其他人从中受益或做出贡献。
我认为这很酷,但请自行判断。
它仍然是WIP(工作进行中),所以非常欢迎更改请求。
默认情况下,项目有3种配置
每种配置都可以放在同一设备上,并且可以清楚地区分每个构建。更容易在不同版本和分支中找到问题。
查看每个图标可以得到以下信息
您还可以使用KZBootstrap API在运行应用程序时查询这些信息。
编译器团队添加警告是有原因的,因此我从Weverything开始,禁用了一些警告
将警告视为错误是必须的。
#if merowing
//! my code
#endif
还有一件事,我们来定义一些宏:为了防止传递nil作为参数
当你需要子类调用超类时
当你想要避免拼写错误时
通常在为大型客户工作时,你需要为预发布/生产/质量控制等创建多个环境。它们通常在某种配置上有所不同,例如不同的URL端点。
很多时候,我看到人们为每一个分别创建单独的目标,这会导致维护成本和不需要的 bloating / clutter。
因此,我创建了一种不同的方法,其中包含一些很好的自动化。
如果您正在使用 CocoaLumberjack,您可以包含 KZBootstrap/Logging 子规范以获取在 AppCode 中作为可点击链接工作的日志格式化。
如果您决定包含 KZBootstrap/Debug 子规范,您将得到
[KZBResponseTracker printAll]
KZBootstrap 通过 CocoaPods 提供。要安装它,只需将以下行添加到您的 Podfile 中
您需要对项目执行一些操作,您可以使用我的 crafter 设置工具使其自动完成,也可以手动完成。
app${BUNDLE_DISPLAY_NAME_SUFFIX}
"${SRCROOT}/Pods/KZBootstrap/Pod/Assets/Scripts/bootstrap.sh"
。你可以通过传递参数到bootstrap.sh来选择性启用功能-l
将启用行计数警告-t
将启用TODO警告-u
将启用用户宏-n
将启用构建编号自动化-i
将启用图标版本控制。(这也会启用构建编号自动化。)基本crafter设置可能如下所示,将CUSTOM替换为你喜欢的步骤
# All your configuration should happen inside configure block
Crafter.configure do
# This are projects wide instructions
add_platform({:platform => :ios, :deployment => 7.0})
add_git_ignore
duplicate_configurations({:adhoc => :release})
# set of options, warnings, static analyser and anything else normal xcode treats as build options
set_options %w(
RUN_CLANG_STATIC_ANALYZER
GCC_TREAT_WARNINGS_AS_ERRORS
)
set_build_settings({
:'WARNING_CFLAGS' => %w(
-Weverything
-Wno-objc-missing-property-synthesis
-Wno-unused-macros
-Wno-disabled-macro-expansion
-Wno-gnu-statement-expression
-Wno-language-extension-token
-Wno-overriding-method-mismatch
).join(" ")
})
set_build_settings({
:'BUNDLE_ID_SUFFIX' => '.dev',
:'BUNDLE_DISPLAY_NAME_SUFFIX' => 'dev',
:'KZBEnv' => 'QA'
}, configuration: :debug)
set_build_settings({
:'BUNDLE_ID_SUFFIX' => '.adhoc',
:'BUNDLE_DISPLAY_NAME_SUFFIX' => 'adhoc',
:'KZBEnv' => 'QA'
}, configuration: :adhoc)
set_build_settings({
:'BUNDLE_ID_SUFFIX' => '',
:'BUNDLE_DISPLAY_NAME_SUFFIX' => '',
:'KZBEnv' => 'PRODUCTION'
}, configuration: :release)
# CUSTOM: Modify plist file to include suffix and displayname
# CUSTOM: Add empty KZBootstrapUserMacros.h file to your project and .gitignore
# CUSTOM: Add KZBEnvironments.plist with list of your environments under KZBEnvironments key
# target specific options, :default is just a name for you, feel free to call it whatever you like
with :default do
# each target have set of pods
pods << %w(KZAsserts KZBootstrap KZBootstrap/Logging KZBootstrap/Debug)
# add build script for bootstrap
scripts << {:name => 'KZBootstrap setup', :script => '"${SRCROOT}/Pods/KZBootstrap/Pod/Assets/Scripts/bootstrap.sh"'}
end
end
如果你想支持动态环境切换的app delegate,可以添加类似的内容
NSLog(@"user variable = %@, launch argument %@", @"d", [[NSUserDefaults standardUserDefaults] objectForKey:@"KZBEnvOverride"]);
KZBootstrap.defaultBuildEnvironment = KZBEnv;
KZBootstrap.onCurrentEnvironmentChanged = ^(NSString *newEnv, NSString *oldEnv) {
NSLog(@"Changing env from %@ to %@", oldEnv, newEnv);
};
[KZBootstrap ready];
NSLog(@"KZBootstrap:\n\tshortVersion: %@\n\tbranch: %@\n\tbuildNumber: %@\n\tenvironment: %@", KZBootstrap.shortVersionString, KZBootstrap.gitBranch, @(KZBootstrap.buildNumber), KZBootstrap.currentEnvironment);
KZBootstrap可用在MIT许可协议下。有关更多信息,请参阅LICENSE文件。
Krzysztof Zablocki,[email protected]
如果没有这样一个伟大的社区,这一切都是不可能的。试图列出所有引用,但如果您认为我遗漏了某些内容 请告诉我。
参考资料
https://github.com/crushlovely/Amaro
https://github.com/crushlovely/Sidecar
http://swwritings.com/post/2013-05-20-concurrent-debug-beta-app-store-builds
https://gist.github.com/dulaccc/a52154ac4c007db2be55
https://gist.github.com/steipete/5664345
http://blog.manbolo.com/2013/05/17/passing-user-variable-to-xcodebuild
http://blog.jaredsinclair.com/post/97193356620/the-best-of-all-possible-xcode-automated-build
https://github.com/krzysztofzablocki/crafter
https://github.com/krzysztofzablocki/IconOverlaying
非常感谢Lextech Global Services对我社区工作的支持,他们很棒。如果您需要一个企业的移动应用,您应该和他们谈谈。