1

I'm trying to quickly test what kind of results I'd get using SecureUDID before I can use in my Xcode project. In this case I'm using CodeRunner but I've never compiled obj-c code outside of Xcode. I've attached the error I'm getting when using the default compilation flag CodeRunner provides for Obj-c files. I've experimented with compilation flag options inspired from the answer for this questions but still getting essentially the same error. What compilation flags should I be using? Are there any good resources to learn how to compile obj-c outside of Xcode? Please help thanks!

enter image description here

Update: It looks like I need to add UIKit and maybe others to the compilation flags now?

enter image description here

4

2 回答 2

9

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


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

-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/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 应用程序;它需要在模拟器中运行。回到首选项,将运行命令更改为:

/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 语言,您可以将其添加到自定义运行中的标志中,但是您每次想要运行时都需要处理该模式视图。

你去吧:

安全UDID

不幸的是,日志不会出现在 CodeRunner 控制台中,但您可以打开 Mac 应用程序控制台来查看它们。我还得到了一些额外的黑色填充。还不知道我做错了什么。

于 2012-08-07T22:36:25.813 回答
3

该错误意味着链接器找不到 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

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

-框架 UIKit

给你在 Coderunner 中的编译参数。

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

于 2012-04-21T02:23:30.287 回答