SEARCH THIS BLOG
CATEGORIES
ARCHIVES
RECOMMENDED OS X APP

Desktop Calendar Plus
App

Textastic
App

Tap Forms Organizer 5 + Secure Database
App

OmniFocus 2
App

RECOMMENDED iPad APP

GitMongo
App


RECOMMENDED UNIVERSAL APP

Textastic Code Editor 6
App

OmniFocus 2
App

iTeleport VNC AND RDP
App


Tap Forms Organizer 5 + Secure Database
App

LINKS

Macのサンドボックスの事など

サンドボックス対応への期日があと20日くらいで来ますがいかがおすごしでしょうか。

一昨日10.7.4のアップデートが来ましたが、Safari とか Mail とかサンドボックス化が終わってないみたいですが、6月までにもう1回アップデート来るんですかね? 自社製品は10.8からなのかな?

色々とありますが、対応していないと Mac App Store へ提出出来なくなるので対応せざるを得ません。

サンドボックス化で気になった事を幾つか。

ユーザーが選択するファイルなどは PowerBox 経由で割と自由に出来ます。
PowerBox 経由と言っても、今まで通りの Open/Saveパネル に少し手を加えてあげるだけです。

そして、Xcodeの “Summary” タブの “Enable Entitlements” にチェックを入れ、”User Selected File Access” のポップアップで “Read/Write Access” を選択します。
Xcode User Selected File Access Popup

MyApp.entitlements が作成されるので中を見るとこんな感じになっています。
SandboxKeys_20120511
テキストエディタ等で開くとこうなります。

<key>com.apple.security.app-sandbox</key>
<true/>
<key>com.apple.security.files.user-selected.read-write</key>
<true/>

簡単ですね。

次に他アプリケーションとの通信ですが、ここが意外と面倒です。

例えば、他のアプリケーションを起動する、

[[NSWorkspace sharedWorkspace] launchApplication:appPath];

はもう使えません。
ごめんなさい、使えます。

次にシステムのログイン項目に追加する場合です。

どうやらサンドボックス化をすると、本アプリケーションはシステムのログイン項目に追加出来ません。
MyApp.app/Contents/Library/LoginItems/ にヘルパーアプリケーションなどを作って、本アプリケーションでヘルパーアプリケーションをログイン項目に追加しなさいと言う事らしいです。
ヘルパーアプリケーションは、LSUIElement か、LSBackgroundOnly でないといけません

まあ、通信系はヘルパーに任せることで、セキュリティを確保出来るので良いかもしれませんが、結構面倒です。

また、今までと追加・削除の方法が変わります。

今までログイン項目に追加する際には、

NSString *appPath = [[NSString alloc] initWithString:[[NSBundle mainBundle] bundlePath]];
CFURLRef url = (CFURLRef)[NSURL fileURLWithPath:appPath];
LSSharedFileListRef loginItems = LSSharedFileListCreate(NULL, kLSSharedFileListSessionLoginItems, NULL);
LSSharedFileListItemRef itemRef = LSSharedFileListInsertItemURL(loginItems, kLSSharedFileListItemLast, NULL, NULL, url, NULL, NULL);

の様にして追加できていましたが、今回から
ServiceManagement.framework の、SMLoginItemSetEnabled で追加する必要があります。
追加は

SMLoginItemSetEnabled((CFStringRef)ref, true);

削除は

SMLoginItemSetEnabled((CFStringRef)ref, false);

refは、バンドルIDを渡します。

追加削除は前よりも簡単になっています。本体を直で追加できたら良いのですがー。

そしてこの方法だと、今までシステム環境設定のアカウントのログイン項目に表示されていたアプリケーション名や、ヘルパーアプリケーション名は表示されないみたいです。これは結構落とし穴ですね。数時間悩みました…

最後に、ログイン項目の追加と削除を楽にしてくれるクラスを作ってくれています。
StartAtLoginController – GitHub

また、この方法でログイン項目に追加すると、/Applications/ に本体が無いとうまくログイン時に起動出来ませんのでこれも注意です。Debug/Release フォルダなどから移動させてテストする必要があります。

あ、Xcode 4 の Schemeは、Xcode3 と同じようにできるので、分けておくと便利ですよー。
Xcode Schemes

| Mac, Programming | Permalink | コメント (0) | Trackback(0) |
 
TRACKBACK
このエントリーのトラックバックURL:
http://hyslog.com/blog/2012/05/12/372/trackback

コメントはお気軽にどうぞ



« | メイン | »