Как скомпилировать SecureUDID с CodeRunner

Я пытаюсь быстро проверить, какие результаты я получу, используя SecureUDID, прежде чем использовать в своем проекте Xcode. В этом случае я использую CodeRunner, но я никогда не компилировал код obj-c вне Xcode. Я прикрепил ошибку, которую получаю, используя флаг компиляции по умолчанию, который CodeRunner предоставляет для файлов Obj-c. Я экспериментировал с параметрами флагов компиляции, вдохновленными ответом на эти вопросы, но по-прежнему получал ту же ошибку. Какие флаги компиляции я должен использовать? Есть ли хорошие ресурсы, чтобы узнать, как скомпилировать obj-c вне Xcode? Пожалуйста, помогите спасибо!

Обновление: Похоже, мне нужно добавить UIKit и, возможно, другие к флагам компиляции сейчас?

2 ответа

Решение

Я согласен с Маттией, но Xcode, вероятно, лучший путь: ВЫЗОВ ПРИНЯТ.


Во-первых, давайте возьмем CodeRunner для компиляции с UIKit. В настройках 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 = скрыто -fobjc-abi-version=2 -fobjc-legacy-dispatch -mios-simulator-version-min=5.1 -Framework Foundation -framework UIKit -F /Applications/Xcode.app/Contents/ Разработчик / Платформы / iPhoneSimulator.platform / Разработчик /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

Это потому, что вы пытаетесь запустить приложение iOS на Mac, на котором нет UIKit; он должен работать в симуляторе. Вернувшись в настройки, измените команду запуска на:

/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" во флаги компиляции. Таким образом, вы можете повторно использовать язык iOS в CodeRunner, вы можете добавить это к флагам в Custom Run, однако вам придется работать с этим модальным представлением каждый раз, когда вы хотите запустить.

И вот вы идете:

SecureUDID

К сожалению, регистрация не будет отображаться в консоли CodeRunner, но вы можете открыть приложение Mac, Console, чтобы увидеть их. Я также получаю дополнительную черную прокладку. Еще не уверен, что я делаю неправильно, чтобы получить это.

Эта ошибка означает, что компоновщик не может найти реализацию для 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 - вы будете намного счастливее.

Другие вопросы по тегам