我在我的所有应用中都使用了一个库,其中包含常用代码。我把它编译为Mac的“框架”和iOS的“静态库”。
我希望图书馆能够引用由最终包括项目定义的变量。
例如,该库具有以下功能:
void printAppID(void);
void printAppID(void) {
NSLog(@"App ID is: %@", kAppID);
}
当然,如果未声明此变量,库将抛出警告,因此我将其声明为:
NSString *kAppID;
由于事先不知道库kAppID
(每个项目都不同),最终项目的确如下:
NSString *kAppID = @"ABCD1234"
这会抛出编译器错误:
架构的未定义符号
我已尝试使用extern
,或将其设为函数或#define
,并且无法破解此版本。
在库中声明变量并在其他地方定义变量的规范方法是什么?我认为这与C在Obj-C中是一样的。
如何将一个包含在应用程序项目中的已编译静态库与Constants.h头文件一起使用,该文件的值可以在该项目中编辑并由库使用? < / p>
答案 0 :(得分:2)
可能的方法是在库中有一个setAppID
方法,应用程序必须调用它才能设置ID。
也就是说,kAppID
是图书馆的一部分:
static NSString* kAppID = nil;
void setAppID (NSString* appID) {
kAppID = appID;
}
// ...library can use kAppID as necessary...
答案 1 :(得分:2)
extern是正确的方法。
在你的lib中:
extern NSString* const kAppID;
项目中的某个地方:
NSString* const kAppID = @"ABCD1234";
在你的lib中使用Singleton对象你可以从你的项目配置是一个更好的方法。但是如果你想让链接器在没有设置的情况下崩溃,那么使用extern是正确的方法。