1

iPhone のロック画面の微調整を実装したいと考えています。ロック画面に、画面のロックを解除して電話アプリを開くことができるボタンを追加しました。このボタン アクションのコードは次のとおりです。

[self unlockWithSound:YES];
int (*openApp)(CFStringRef, Boolean);
void* sbServices = dlopen("/System/Library/PrivateFrameworks/SpringBoardServices.framework/SpringBoardServices", RTLD_LAZY);
openApp= (int(*)(CFStringRef, Boolean))dlsym(sbServices,"SBSLaunchApplicationWithIdentifier");
openApp(CFSTR("com.apple.mobilephone"), FALSE);
dlclose(sbServices);

しかし、このボタンをタップしてこのコードを実行すると、iOS がクラッシュし、数秒で再起動します。私の iPhone は iOS 6 を実行しており、定期的にジェイルブレイクされています。

バックグラウンド スレッドでコードを実行すると、syslog ファイルに次のように表示されました。

Entitlement com.apple.springboard.launchapplications required to use kern_return_t    _SBXXLaunchApplication(mach_port_t, char *, sbs_url_string_t, sbs_property_list_data_t, mach_msg_type_number_t, sbs_property_list_data_t, mach_msg_type_number_t, SBSApplicationLaunchFlags, SBSApplicationLaunchError *, audit_token_t)

そしてメインスレッドで:

Oct 31 11:11:40 Kevin-Yes-iPhone lockdownd[41]: 2fe93000 _receive_message: walk away - non-SSL 1
Oct 31 11:12:13 Kevin-Yes-iPhone profiled[163]: (Note ) profiled: Idled. 
Oct 31 11:12:13 Kevin-Yes-iPhone profiled[163]: (Note ) profiled: Service stopping.
Oct 31 11:12:15 Kevin-Yes-iPhone securityd[363]: MS:Notice: Installing: (null) [securityd] (793.00)
Oct 31 11:12:15 Kevin-Yes-iPhone afcd[367]: Max open files: 125
Oct 31 11:12:17 Kevin-Yes-iPhone afcd[368]: Max open files: 125
Oct 31 11:12:33 Kevin-Yes-iPhone securityd[369]: MS:Notice: Installing: (null) [securityd] (793.00)
Oct 31 11:12:37 Kevin-Yes-iPhone lockdownd[41]: 2fe93000 _receive_message: walk away - non-SSL 1
Oct 31 11:13:00 Kevin-Yes-iPhone securityd[371]: MS:Notice: Installing: (null) [securityd] (793.00)

私の質問は、なぜ私の微調整でこのコードを実行できないのですか? 開発ツールとして iosopendev を使用していますが、iosopendev に問題はありますか?

4

2 に答える 2

2

わかりました、ここで何が起こっているのかわかりました。SpringBoard アプリケーション内で実行される微調整を作成しています。通常、これSBSLaunchApplicationWithIdentifier()はおそらく (?) SpringBoardServices を介して、SpringBoard 以外の他のコードがアプリケーションを開くことを許可するために使用されます。

SpringBoardの微調整の場合、アプリを起動するためのより直接的な方法は、おそらくこちらのドキュメントに従うことです。ただし、今はテストできません。 これは、基本的にこの手法を使用する別のスタック オーバーフローの回答です。

メッセージが示すように、実行しようとしているコードにはcom.apple.springboard.launchapplications資格が必要です。興味深いことにSpringBoard、おそらくアプリを直接起動できるため、それ自体にはその権利がありません。

于 2013-10-31T07:17:11.233 に答える