如何使用CodeRunner编译SecureUDID

Mac*_*Mac 1 objective-c ios coderunner

我想在我可以在我的Xcode项目中使用之前,尝试使用SecureUDID快速测试我会得到什么样的结果.在这种情况下,我正在使用CodeRunner,但我从未在Xcode之外编译obj-c代码.我使用了CodeRunner为Obj-c文件提供的默认编译标志时附加了我得到的错误.我已经尝试了从这个问题的答案中获得灵感的编译标志选项,但仍然得到了基本相同的错误.我应该使用哪些编译标志?有没有什么好的资源可以学习如何在Xcode之外编译obj-c?请帮忙谢谢!

在此输入图像描述

更新:看起来我需要将UIKit和其他人添加到编译标志中吗?

在此输入图像描述

Cor*_*ger 9

我同意Mattia,Xcode可能是最好的方式,但是:CHALLENGE ACCEPTED.


首先,让我们让CodeRunner与UIKit一起编译.在CodeRunner首选项中,复制Objective-C语言并将其命名为"iOS".我正在使用Xcode使用的命令(可以在Log Navigator中找到)作为模板.这也是Mattia所说的.将编译标志设置为如下所示:

-arch i386 -fmessage-length = 0 -std = c99 -fpascal-strings -O0 -isysroot /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator5.1.sdk-fexceptions- fasm-blocks -g -fvisibility = hidden -fobjc-abi-version = 2 -fobjc-legacy-dispatch -mios-simulator-version-min = 5.1 -framework Foundation -framework UIKit -F /Applications/Xcode.app/Contents/开发者/平台/ iPhoneSimulator.platform /开发商/软件开发工具包/ iPhoneSimulator5.1.sdk /系统/库/框架

注意iPhoneSimulator5.1.sdk路径和-mios-simulator-version-min=5.1标志.您可能需要为自己的系统和版本更改这些.

首先,尝试使用以下iOS代码(您也可以在首选项中将其设为模板):

#import <Foundation/Foundation.h>
#import <UIKit/UIKit.h>

@interface AppDelegate : NSObject <UIApplicationDelegate>

@property (nonatomic, retain) UIWindow * window;
@property (nonatomic, retain) UIViewController * viewController;

@end

@implementation AppDelegate

@synthesize window = _window;
@synthesize viewController = _viewController;

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {

    self.viewController = [[[UIViewController alloc] initWithNibName:nil bundle:nil] autorelease];
    self.viewController.view.backgroundColor = [UIColor orangeColor];
    UILabel * label = [[UILabel alloc] initWithFrame:self.viewController.view.bounds];
    label.font = [UIFont boldSystemFontOfSize:48.0];
    label.textColor = [UIColor whiteColor];
    label.backgroundColor = [UIColor clearColor];
    label.textAlignment = UITextAlignmentCenter;
    label.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight;
    label.text = @"Hello World";
    [self.viewController.view addSubview:label];
    [label release];

    self.window = [[[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] applicationFrame]] autorelease];
    self.window.rootViewController = self.viewController;
    [self.window makeKeyAndVisible];

    return YES;
}

@end

int main(int argc, char *argv[]) {
    @autoreleasepool {
        UIApplicationMain(argc, argv, nil, @"AppDelegate");
    }
}
Run Code Online (Sandbox Code Playgroud)

如果您尝试运行,它应该编译,但应用程序将崩溃并出现此错误:

dyld:未加载库:/System/Library/Frameworks/UIKit.framework/UIKit

这是因为你试图在没有UIKit的Mac上运行iOS应用程序; 它需要在模拟器中运行.返回首选项,将Run Command更改为:

/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/Applications/iPhone\Simulator.app/Contents/MacOS/iPhone\Simulator -SimulateApplication $ PWD/$ compiler

现在运行相同的代码.iOS模拟器应该启动,您应该看到一个带有"Hello World"的橙色屏幕:

你好,世界

现在让它与SecureUDID一起使用.你需要在某处保存代码.现在将SecureUDID .h和.m文件复制到与保存的代码相同的文件夹中.添加#import "SecureUDID.h"到文件顶部,将字体大小14.0更改@"Hello World"为,然后更改为[SecureUDID UDIDForDomain:@"com.example.test" usingKey:@"abcdefg"].如果你运行代码,它会抱怨它无法找到你看到的SecureUDID符号.我们需要在编译标志中添加"SecureUDID.m".因此,您可以在CodeRunner中重用iOS语言,您可以将其添加到自定义运行中的标志,但是每次要运行时都需要处理该模态视图.

你去了:

SecureUDID

遗憾的是,日志记录不会出现在CodeRunner控制台中,但您可以打开Mac应用程序控制台来查看它们.我也得到一些额外的黑色填充物.还不确定我做错了什么.