首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何用CodeRunner编译SecureUDID

如何用CodeRunner编译SecureUDID
EN

Stack Overflow用户
提问于 2012-04-21 09:45:10
回答 2查看 1.5K关注 0票数 1

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

更新:看起来我现在需要把UIKit和其他的添加到编译标志中了?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-08-08 06:36:26

我同意马蒂亚的观点,Xcode可能是最好的方式,然而:挑战接受的

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

-arch i386 -fmessage-length=0 -std=c99 -fpascal- -O0 -isysroot -fexceptions -min -g -fvisibility=hidden -fobjc-abi-i386=2-fobjc---fvisibility=hidden-mios-i386--fvisibility=hidden- -framework -framework UIKit -F min=5.1

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

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

代码语言:javascript
复制
#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");
    }
}

如果您尝试运行,它应该会编译,但是应用程序将崩溃,并显示以下错误:

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

dyld

这是因为您正尝试在没有UIKit的Mac上运行iOS应用程序;它需要在模拟器中运行。返回到首选项,将运行命令更改为:

编译器模拟器.app/Contents/MacOS/iPhone\模拟器-SimulateApplication $PWD/$编译器

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

这就对了:

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

票数 9
EN

Stack Overflow用户

发布于 2012-04-21 10:23:30

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

更新:

UIKit是一个iOS框架,所以它不是像基础这样的常规框架。假设您已经安装了Xcode4.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 -您会对它感到非常高兴。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10255487

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档