Xcode メモ

Last-modified: 2007-07-27 (金) 09:59:40
 

ファイルが保存できない

プロジェクトを立ち上げた時、前回作成した.mやら.hやらのファイルを変更して保存しようとすると、「このファイルは保存することができません。」のダイアログが出て保存できなくなっていることがある。2バイト文字を使用して保存した後などに起こる。
ツールバーの「形式」>「ファイルエンコーディング」>「Unicode(UTF-8)」に変換することでとりあえず解決。

 
環境:IntelCPU+MacOS10.4.8+Xcode2.2.1&Xcode2.4
2006-10-XX

アバウトパネル (HIAboutBox)

HIAboutBox
HIAboutBox
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 に設定するもの
    Property ListClassValueSample
    CFBundleNameStringメニューバーとアバウトパネルで使用するアプリ名
    全角16文字以内推奨っぽいです
    ${PRODUCT_NAME}
    CFBundleVersionStringアバウトパネルで表示されるバージョン番号Version 0.7.1
    CFBundleShortVersionStringStringFinderで表示されるバージョン番号0.7.1
    CFBundleGetInfoStringString情報パネルで表示されるバージョン情報${PRODUCT_NAME} 0.7.1, Copyright (C) 2006 MameApp, All Rights Reserved.
    ※「CFBundleGetInfoString」は古いから「NSHumanReadableCopyright」を使うように!と書いてあるのですが、「CFBundleGetInfoString」じゃないとInfo画面に表示されません。よくわからず。
 
  • Sample
    HIAboutBox
環境:IntelCPU+MacOS10.4.8+Xcode2.4
2006-11-20

アバウトパネル (orderFrontStandardAboutPanel)

HIAboutBox
HIAboutBox
HIAboutBox
  • アバウトパネルを表示する場所に追加するコード
    // アバウトパネル
    [[ NSApplication sharedApplication ] orderFrontStandardAboutPanel : nil ];
 
  • Info.plist に設定するもの
    Property ListClassValueSample
    CFBundleNameStringメニューバーとアバウトパネルで使用するアプリ名
    全角16文字以内推奨っぽいです
    ${PRODUCT_NAME}
    CFBundleVersionStringアバウトパネルで表示される()内のバージョン番号0.7.1
    CFBundleShortVersionStringStringアバウトパネルとFinderで表示されるバージョン番号0.7.1
    CFBundleGetInfoStringString情報パネルで表示されるバージョン情報${PRODUCT_NAME} 0.7.1, Copyright (C) 2006 MameApp, All Rights Reserved.
    ※「CFBundleGetInfoString」は古いから「NSHumanReadableCopyright」を使うように!と書いてあるのですが、「NSHumanReadableCopyright」はどこに表示されるかよくわからず。
 
  • InfoPlist.strings に設定するもの
    アバウトパネルの一番下に表示される文字。
    NSHumanReadableCopyright = "(C) MameApp, 2006";
 
  • Resources に登録するもの
    Credits.html や Credits.rtf をResourcesフォルダ以下に登録すると、アバウトパネルの一部として読み込んでくれる。
    リンクや画像も追加でき便利。長いとスクロールがつき、なかなかかっこよい。
 
  • Sample
AboutPanel
AboutPanel
環境:IntelCPU+MacOS10.4.8+Xcode2.4.1
2006-11-20

ローカライズ

メニューバーのローカライズ

  • Project Builder の Resources の MainMenu.nib > 情報を見る > 「一般」タブ > 言語環境を追加
     
    Resources の MainMenu.nib の下に追加された MainMenu.nib(追加言語環境名) ファイルを該当言語で編集する。

Info.plist のローカライズ

  • Project Builder の Resources の InfoPlist.strings > 情報を見る > 「一般」タブ > 言語環境を追加
     
    Resources の InfoPlist.strings の下に追加された InfoPlist.strings(追加言語環境名) ファイルを該当言語で編集する。

Localizable.strings のローカライズ

Localizable.strings が既に存在する場合

  • Project Builder の Localizable.strings > 情報を見る > 「一般」タブ > 言語環境を追加
     
    Resources の Localizable.strings の下に追加された Localizable.strings(追加言語環境名) ファイルを該当言語で編集する。
 

Localizable.strings が存在しない場合

  • Project Builder の Resources を右クリック > 追加 > 空のファイル > ファイル名「Localizable.strings」
  • Project Builder の Resources の Localizable.strings > 情報を見る > 「一般」タブ > ファイルをローカライズ可能にする > 「一般」タブ > 言語環境を追加
     
    Resources の Localizable.strings の下に追加された Localizable.strings(追加言語環境名) ファイルを該当言語で編集する。

Localizable.strings から値を取得する方法

 
環境:IntelCPU+MacOS10.4.8+Xcode2.4.1
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>
     

ユーザ側の作業

Sample

豆アプリも対応してみました。上が通常、下が Smart Crash Reports で機能拡張したもの。

 
Crash Reports(ノーマル)
Crash Reports(拡張)

送信されてきたメールのリンクから Unsanity のサイト上でもクラッシュログがチェックできます。

 
環境:IntelCPU+MacOS10.4.8+Xcode2.4.1
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ファイル名のバージョン番号を使っているようです。

 
環境:IntelCPU+MacOS10.4.8+Xcode2.4.1+Sparkle1.1
2007-03-11