1

Xcodeプロジェクトで使用する前に、SecureUDIDを使用してどのような結果が得られるかをすばやくテストしようとしています。この場合、私はCodeRunnerを使用していますが、Xcodeの外部でobj-cコードをコンパイルしたことはありません。CodeRunnerがObj-cファイルに提供するデフォルトのコンパイルフラグを使用するときに発生するエラーを添付しました。私はこの質問の答えから着想を得たコンパイルフラグオプションを試しましたが、それでも本質的に同じエラーが発生します。どのコンパイルフラグを使用する必要がありますか?Xcodeの外でobj-cをコンパイルする方法を学ぶための良いリソースはありますか?助けてください!

ここに画像の説明を入力してください

更新:UIKitやその他のUIKitをコンパイルフラグに追加する必要があるようです。

ここに画像の説明を入力してください

4

2 に答える 2

9

私はMattiaに同意しますが、Xcodeがおそらく最善の方法です:チャレンジは受け入れられました。


まず、CodeRunnerをUIKitでコンパイルしてみましょう。CodeRunnerの設定で、Objective-C言語を複製し、「iOS」のような名前を付けます。Xcodeが使用するコマンド(ログナビゲーターにあります)をテンプレートとして使用しています。これはマティアが話していたことでもあります。コンパイルフラグを次のように設定します。

-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アプリを実行しようとしているためです。シミュレータで実行する必要があります。環境設定に戻り、[コマンドの実行]を次のように変更します。

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

ここで同じコードを実行します。iOSシミュレーターが起動し、「HelloWorld」が表示されたオレンジ色の画面が表示されます。

こんにちは世界

次に、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アプリのコンソールを開いてそれらを表示することができます。私はまた、いくつかの余分な黒いパディングを取得しています。それを得るために私が間違っていることはまだわかりません。

于 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で実行できるため、コードランナーと戦って完全なIDEのように動作させるのではなく、Xcodeを使用するだけで済みます。

于 2012-04-21T02:23:30.287 に答える