- ファイルが保存できない
- アバウトパネル (HIAboutBox)
- アバウトパネル (orderFrontStandardAboutPanel)
- ローカライズ
- クラッシュレポート (Smart Crash Reports)
- アプリ更新フレームワーク (Sparkle)
ファイルが保存できない
プロジェクトを立ち上げた時、前回作成した.mやら.hやらのファイルを変更して保存しようとすると、「このファイルは保存することができません。」のダイアログが出て保存できなくなっていることがある。2バイト文字を使用して保存した後などに起こる。
ツールバーの「形式」>「ファイルエンコーディング」>「Unicode(UTF-8)」に変換することでとりあえず解決。
2006-10-XX
アバウトパネル (HIAboutBox)
- プロジェクトに追加するファイル
システム > ライブラリ > Frameworks > Carbon.framework
- .hファイルに追加するコード
#import <Carbon/Carbon.h>
- アバウトパネルを表示する場所に追加するコード
// アバウトパネル if(HIAboutBox == NULL) { // Jaguarでアバウトパネルを表示するためのコード(適当例) NSRunAlertPanel(@"About", @"Copyright (c) 2006 MameApp, All Rights Reserved.", @"Close", nil, nil); } else { HIAboutBox(NULL); }
- Info.plist に設定するもの
※「CFBundleGetInfoString」は古いから「NSHumanReadableCopyright」を使うように!と書いてあるのですが、「CFBundleGetInfoString」じゃないとInfo画面に表示されません。よくわからず。
Property List Class Value Sample CFBundleName String メニューバーとアバウトパネルで使用するアプリ名
全角16文字以内推奨っぽいです${PRODUCT_NAME} CFBundleVersion String アバウトパネルで表示されるバージョン番号 Version 0.7.1 CFBundleShortVersionString String Finderで表示されるバージョン番号 0.7.1 CFBundleGetInfoString String 情報パネルで表示されるバージョン情報 ${PRODUCT_NAME} 0.7.1, Copyright (C) 2006 MameApp, All Rights Reserved.
- Sample
2006-11-20
アバウトパネル (orderFrontStandardAboutPanel)
- アバウトパネルを表示する場所に追加するコード
// アバウトパネル [[ NSApplication sharedApplication ] orderFrontStandardAboutPanel : nil ];
- Info.plist に設定するもの
※「CFBundleGetInfoString」は古いから「NSHumanReadableCopyright」を使うように!と書いてあるのですが、「NSHumanReadableCopyright」はどこに表示されるかよくわからず。
Property List Class Value Sample CFBundleName String メニューバーとアバウトパネルで使用するアプリ名
全角16文字以内推奨っぽいです${PRODUCT_NAME} CFBundleVersion String アバウトパネルで表示される()内のバージョン番号 0.7.1 CFBundleShortVersionString String アバウトパネルとFinderで表示されるバージョン番号 0.7.1 CFBundleGetInfoString String 情報パネルで表示されるバージョン情報 ${PRODUCT_NAME} 0.7.1, Copyright (C) 2006 MameApp, All Rights Reserved.
- InfoPlist.strings に設定するもの
アバウトパネルの一番下に表示される文字。NSHumanReadableCopyright = "(C) MameApp, 2006";
- Resources に登録するもの
Credits.html や Credits.rtf をResourcesフォルダ以下に登録すると、アバウトパネルの一部として読み込んでくれる。
リンクや画像も追加でき便利。長いとスクロールがつき、なかなかかっこよい。
- Sample
2006-11-20
ローカライズ
メニューバーのローカライズ
- Project Builder の Resources の MainMenu.nib > 情報を見る > 「一般」タブ > 言語環境を追加
Info.plist のローカライズ
- Project Builder の Resources の InfoPlist.strings > 情報を見る > 「一般」タブ > 言語環境を追加
Localizable.strings のローカライズ
Localizable.strings が既に存在する場合
- Project Builder の Localizable.strings > 情報を見る > 「一般」タブ > 言語環境を追加
Localizable.strings が存在しない場合
- Project Builder の Resources を右クリック > 追加 > 空のファイル > ファイル名「Localizable.strings」
- Project Builder の Resources の Localizable.strings > 情報を見る > 「一般」タブ > ファイルをローカライズ可能にする > 「一般」タブ > 言語環境を追加
※Localizable.strings から値を取得する方法
2006-12-04
クラッシュレポート (Smart Crash Reports)
アプリがクラッシュした場合、普通Appleにクラッシュレポートを送る画面が出ます。
ここで送ったクラッシュレポートを、ソフト開発者にも送ることができるソフトが Unsanity の Smart Crash Reports です。
ユーザ側でもインストールが必要ですが、対応アプリが増えてインストールしているユーザが増えればこれはすごく便利そうです。
欠点はユーザ側で Smart Crash Reports がインストールされていないと意味がないこと、利点はアプリサイズがplist2キー分しかサイズが増えないことです。
アプリ開発者側の作業(通常のアプリ&Unsanity のサーバを経由させる場合)
- E-mail Ticket を申し込む
- Info.plist にキーを二つ追加する
<key>SmartCrashReports_CompanyName</key> <string>アプリ開発者名</string> <key>SmartCrashReports_EmailTicket</key> <string>ゲットしたE-mail Ticket</string>
ユーザ側の作業
- Smart Crash Reports をインストールする
Sample
豆アプリも対応してみました。上が通常、下が Smart Crash Reports で機能拡張したもの。
送信されてきたメールのリンクから Unsanity のサイト上でもクラッシュログがチェックできます。
2007-03-05
アプリ更新フレームワーク (Sparkle)
Appcasting でアプリの更新チェック・自動更新などできるらしき、Cocoa のフレームワークの一つが Sparkle です。
問題点が二つあり、このフレームワークを普通に組み込むとアプリサイズが+1.4MBととてつもなく大きくなってしまいます。
MameAppでは英語バージョンのみの組み込みとし、+250KB程度に抑えられました。必要言語のみに絞ればそれほど大きくならなさそうです。と言ってもやはりアプリ本体より大きい場合、気軽な組み込みは多少悩むところですが…。
もう一つの問題点は、これ便利すぎてサイトに来てくれる人がいなくなるのではないか?と言うことです。
XCODEでの作業
グループとファイル欄
- 組み込みたいアプリのプロジェクトファイルを開く
- Frameworks の Linked Frameworks に Sparkle.framework をドラッグ&ドロップなどで追加
- 「ターゲット」 の▼を展開し、ターゲットを右クリック > 追加 > 新規ビルドフェーズ > 新規コピーファイル
- ターゲットの▼を展開すると「ファイルをコピー」が追加されているはずなので、上で追加した Sparkle.frameworkをドラッグ&ドロップ
- 「ファイルをコピー」の情報パネルで「デスティネーション」を「フレームワーク」にする。
Info.plist
- Info.plistにキーの追加
<key>SUFeedURL</key> <string>http://www.mysite/appcasting.xml</string>
Appcasting ファイルへのパスは必須のようです。
他にも色々設定できますので、お好みでどうぞ。
Interface Builder での作業
- メインメニューに「Check Updates...」など適当なメニューアイテムを追加
- Classesタブで「Read Files...」からファイルを追加(Sparkle.framework > Headers > SUUpdater.h)
- 追加したファイルをインスタンス化する
- 「Check Updates...」とSUUpdaterの「checkForUpdates」を接続
Sample
豆アプリも対応してみました。上が新しいバージョンがあった場合、下が最新だった場合のダイアログです。
Sparkle の英語バージョンのみを組み込んだ場合、アプリ本体が日本語リソースだとエラーが出てアップグレードが行えません。
アプリ本体を英語リソースのみにするか、Sparkle の日本語リソースをつけるか(試していないので予想)すれば正しく動作します。
バージョンのチェックは、Info.plist の CFBundleVersion とzipファイル名のバージョン番号を使っているようです。
2007-03-11