疑似コードのように単純に CFBundleCopyExecutableURL(CFBundleRef) を使用しているかどうか誰かに教えてもらえますか:
if (CFBundleCopyExecutableURL(MyCFBundleRef) == NULL) {NSLog(@"This app is not supported on this system")};
実際、ローカル ハードウェアでアプリを実行できるかどうかを確認するのに十分ですか?
私のアプリの一部は、OSX10.7 システムのアプリケーション フォルダーのリストをユーザーに表示しますが、デスクトップのような場所に (巧妙に!) 配置されている他のアプリをドラッグ アンド ドロップできるようにしたいと考えています。Lion への OS アップグレードによってシステムに残された古い Universal アプリケーションなどを取り込もうとしていないことを再確認できれば便利です...
ヘッダーと現在のアーキテクチャを調べるために Apple が提供するサンプル コードをいくつか使用しましたが、試したいくつかのアプリでは失敗します。コンピューターがプログラムを実行できるにもかかわらず、コードは false を返します。このコードを確認するには、「checkexecutablearchitecture」で Xcode のドキュメントを検索して、サンプル コードを結果に示します。私は楽観的に、コードが時代遅れであり、上記の単純なチェックで十分であることを望んでいます。
助けてくれてありがとう!
編集:解決策を見つけたと思います-確かに私のシナリオでは。私は今、以下のような小さな方法を使用しています:
-(BOOL)isURLExecutable:(NSURL*)appURL;
{
CFURLRef bundleURL = CFURLCreateFromFileSystemRepresentation(NULL, (uint8_t*)[[appURL path] UTF8String], strlen((const char *)(uint8_t*)[[appURL path] UTF8String]), true);
CFArrayRef archArrayRef = CFBundleCopyExecutableArchitecturesForURL(bundleURL);
BOOL isI386 = [(NSArray*)archArrayRef containsObject:[NSNumber numberWithInt:kCFBundleExecutableArchitectureX86_64]] || [(NSArray*)archArrayRef containsObject:[NSNumber numberWithInt:kCFBundleExecutableArchitectureI386]];
if (archArrayRef != NULL) {
if (isI386) {
return TRUE;
}
else {
return FALSE;
}
}
return FALSE;
}
もっと良い方法を教えてくれる人がいたら、お願いします!
トッド。