Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 确定目标';s从静态库生成配置类型_Ios_Objective C_Xcode - Fatal编程技术网

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,因为您无法在其上安装发布版本(据我所知)。