Xcode 及 iOS 常用宏和常量
Xcode
Xcode 工程设置支持 bash 脚本及其语法,如 $(PROJECT_DIR)
$(PROJECT_DIR)
PROJECT_DIR 代表当前工程的绝对路径,所以 $(PROJECT_DIR)/../ 代表工程路径的上一级
$(TARGET_NAME)
目标工程名称
$(SRCROOT)
工程文件(比如Nuno.xcodeproj)的路径
$(CURRENT_PROJECT_VERSION)
当前工程版本号
$(BUILT_PRODUCTS_DIR)
build成功后的,最终产品路径--可以在Build Settings参数的Per-configuration Build Products Path项里设置
@executable_path
这个变量表示可执行程序所在的目录. 比如 /path/QQ.app/Contents/MacOS/。使用第三方动态库时需要设置这个值
@loader_path
这个变量表示每一个被加载的 binary (包括App, dylib, framework,plugin等) 所在的目录.
在一个程序中, 对于每一个模块, @loader_path 会解析成不用的路径, 而 @executable_path 总是被解析为同一个路径(可执行程序所在目录). 比如一个会被多个程序调用的 plugin, 位于 /path/Flash Player.plugin/Contents/MacOS/Flash Player, 依赖 /path/Flash Player.plugin/Contents/Frameworks/XPSSO.dylib. 那么 XPSSO.dylib 的 INSTALL_PATH 可以设置为 @loader_path/../Frameworks, 这样设置的话, 不论 Flash Player.plugin 目录放到什么位置, XPSSO.dylib 都能正确的被加载.
build 相关
当编译静态库,设备选模拟器(iPhone 5.0 Simulator),未设置任何Build Settings参数时,默认的基础路径:
/Users/xxx/Library/Developer/Xcode/DerivedData/xxxWorkspace-caepeadwrerdcrftijaolkkagbjf
下面用$()代替上面一长串东东
$(SYMROOT) = $()/Build/Products
$(BUILD_DIR) = $()/Build/Products
$(BUILD_ROOT) = $()/Build/Products
这三个变量中的$()不会随着Build Settings参数的设置而改变
相反,以下可以通过设置而改变
$(CONFIGURATION_BUILD_DIR) = $()/Build/Products/Debug-iphonesimulator
$(BUILT_PRODUCTS_DIR) = $()/Build/Products/Debug-iphonesimulator
$(CONFIGURATION_TEMP_DIR) = $()/Build/Intermediates/UtilLib.build/Debug-iphonesimulator
$(TARGET_BUILD_DIR) = $()/Build/Products/Debug-iphonesimulator
$(SDK_NAME) = iphonesimulator5.0
$(PLATFORM_NAME) = iphonesimulator
$(CONFIGURATION) = Debug
$(TARGET_NAME) = UtilLib
$(EXECUTABLE_NAME) = libUtilLib.a 可执行文件名
${IPHONEOS_DEPLOYMENT_TARGET} 5.0
$(ACTION) = build
$(CURRENTCONFIG_SIMULATOR_DIR) 当前模拟器路径
$(CURRENTCONFIG_DEVICE_DIR) 当前设备路径
$(BUILD_DIR)/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME =
$()/Build/Products/Debug-iphonesimulator
$(PROJECT_TEMP_DIR)/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) = $()/Build/Intermediates/UtilLib.build/Debug-iphonesimulator
NS_BLOCK_ASSERTIONS
Foundation 框架已经定义好的预编译宏,可以关闭程序中 NSAssert
参考文章
XCode环境变量及路径设置
iOS
自定义日志函数
#ifdef DEBUG
#define NSLog(FORMAT, ...) fprintf(stderr,"%s:%d\t%s\n",[[[NSString stringWithUTF8String:__FILE__] lastPathComponent] UTF8String], __LINE__, [[NSString stringWithFormat:FORMAT, ##__VA_ARGS__] UTF8String]);
#else
#define NSLog(FORMAT, ...) nil
#endif
常量
如果需要预编译的宏可以在工程的“Preprocessor Mcros”中设置,这里需要注意:
1. Debug 模式系统会自动生成预编译宏 DEBUG
2. 注意 Scheme 中可以自定义编译状态。默认情况下直接“run”为 Debug 模式,会使用“Preprocessor Mcros”中为 Debug 模式设置的宏
__IPHONE_3_0
SDK 版本
#ifndef __IPHONE_3_0
// 说明当前 SDK 版本最高为 2.x
#warning "This project uses features only available in iOS SDK 3.0 and later."
#endif
1
2
3
4
__OBJC__
是否支持 Objective - C
posted on 2019-07-09 07:25 东方🐺 阅读(819) 评论(0) 编辑 收藏 举报