如何使用CodeRunner编译SecureUDID

时间:2012-04-21 01:45:10

标签: ios objective-c coderunner

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

enter image description here

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

enter image description here

2 个答案:

答案 0 :(得分:9)

我同意Mattia,Xcode可能是最好的方式,但是:接受挑战


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

  

-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/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator5.1.sdk/System/Library/Frameworks

请注意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");
    }
}

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

  

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”的橙色屏幕:

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应用程序控制台来查看它们。我也得到一些额外的黑色填充物。还不确定我做错了什么。

答案 1 :(得分:2)

该错误意味着链接器无法找到SecureUDID(.m文件或​​库)的实现。如果你去coderunner的首选项,你可以设置命令行选项并将其指向实现,但老实说,在Xcode中创建一个新项目来测试它可能会更快。 Coderunner很棒但是当你必须处理外部库/源文件时,更容易制作一个一次性的Xcode项目。

更新:

UIKit是一个iOS框架,因此它不适用于像Foundation这样的常规框架。假设你安装了Xcode 4.3,你可以在以下网址找到UIKit:

/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS5.1.sdk/System/Library/Frameworks

您需要将该目录添加到框架搜索路径,然后添加:

-framework UIKit

在Coderunner中编译参数。

你的问题的真正答案是停止尝试使用Coderunner并使用Xcode。 Coderunner用于编写小代码片段,而无需进行所有配置来创建Xcode项目。在这种情况下你需要的是所有的配置和Xcode允许你这样做,所以不要与coderunner打架使它像一个完整的IDE,你应该只使用Xcode - 你会更高兴它。