Ios 确定目标';s从静态库生成配置类型
如何从静态库(调试或发布)获取生成配置类型?Ios 确定目标';s从静态库生成配置类型,ios,objective-c,xcode,Ios,Objective C,Xcode,如何从静态库(调试或发布)获取生成配置类型? 通常我们使用#ifdef DEBUG,但在这种情况下,它将不起作用,因为此检查是编译时的,并且我们的静态库已经编译。如果您只想知道应用程序是在调试还是生产(临时等于生产)中编译的,您可以使用以下方法,该方法可以在静态库中调用: + (BOOL)isDevelopmentBuild { #if TARGET_IPHONE_SIMULATOR return YES; #else BOOL isDevelopment = NO;
通常我们使用
#ifdef DEBUG
,但在这种情况下,它将不起作用,因为此检查是编译时的,并且我们的静态库已经编译。如果您只想知道应用程序是在调试还是生产(临时等于生产)中编译的,您可以使用以下方法,该方法可以在静态库中调用:
+ (BOOL)isDevelopmentBuild
{
#if TARGET_IPHONE_SIMULATOR
return YES;
#else
BOOL isDevelopment = NO;
// There is no provisioning profile in AppStore Apps.
NSData *data = [NSData dataWithContentsOfFile:[NSBundle.mainBundle pathForResource:@"embedded" ofType:@"mobileprovision"]];
if (data) {
const char *bytes = [data bytes];
NSMutableString *profile = [[NSMutableString alloc] initWithCapacity:data.length];
for (NSUInteger i = 0; i < data.length; i++) {
[profile appendFormat:@"%c", bytes[i]];
}
// Look for debug value, if detected we're in a development build.
NSString *cleared = [[profile componentsSeparatedByCharactersInSet:NSCharacterSet.whitespaceAndNewlineCharacterSet] componentsJoinedByString:@""];
isDevelopment = ([cleared rangeOfString:@"<key>get-task-allow</key><true/>"].length > 0);
}
return isDevelopment;
#endif
}
+(BOOL)isDevelopmentBuild
{
#if TARGET_IPHONE_模拟器
返回YES;
#否则
BOOL isDevelopment=否;
//AppStore应用程序中没有设置配置文件。
NSData*data=[NSData data WITH CONTENTS OFFILE:[NSBundle.mainBundle pathForResource:@“embedded”of type:@“mobileprovision”];
如果(数据){
常量字符*字节=[数据字节];
NSMutableString*profile=[[NSMutableString alloc]initWithCapacity:data.length];
对于(整数i=0;i0);
}
回报是发展;
#恩迪夫
}
请注意,如果应用程序处于开发模式,它将返回YES。我不太确定我是否遵循-您是否正在尝试确定静态库是如何构建的?正在运行使用库的应用程序的配置类型是什么?否。我想知道使用库的应用程序的配置类型是什么。我认为您无法做到这一点,因为在编译代码时不会对其进行设置。我很好奇是否有其他方法可以解决您最初的问题-可能有两个版本的库,并在应用程序中链接相应的版本?我的目标是确定应用程序的构建类型并将其发送到服务器…好的,那么您不能制定一个方法将其作为库的参数,然后使用#ifdef等从应用程序进行设置?我假设你正在写这两篇文章,你的答案很有用,但实际上我想知道应用程序的构建类型(调试或发布),不管它是在模拟器上运行还是在设备上运行。请参阅屏幕截图:模拟器只是一个特定的检查,以避免不必要的代码。如果处于开发模式,则返回Yes,否则返回No。请在您的代码中尝试,并让我知道它是否适用于您。只是为了澄清-如果您在一台处于开发模式的真实设备上检查此方法,则返回Yes。它似乎适用于该设备。但模拟器呢?模拟器总是会返回YES,因为您无法在其上安装发布版本(据我所知)。