Hatena::Groupiphone-dev

iPhoneアプリ開発まっしぐら★ このページをアンテナに追加 RSSフィード

引っ越し後の日記はコチラです

tokoromのその他の日記

2011-04-25

じつはもっと簡単なAdHocアプリ(ipa)の作成方法があった件... for Xcode4

| 01:05 | はてなブックマーク -  じつはもっと簡単なAdHocアプリ(ipa)の作成方法があった件... for Xcode4 - iPhoneアプリ開発まっしぐら★

昨日AdHoc版の作り方について記事を書いたが...

この後、Twitterでnovi_さんから

あれ、これって普通にReleaseビルドして、Shareの時にCode Signじゃだめでしたっけ。

というご指摘。

要するに、

  • AdHoc用Configurationとかは作らなくてもOK
  • Edit SchemeとかしなくてもOK

ということ。

実際、novi_さんの言うとおりやってみると、たしかにそれだけでOKでした。

ご指摘ありがとうございます!

以下、AdHocアプリ(ipa)作成の短縮版、まとめさせていただきます。


事前準備

前回と同様、

  • 自分のPCにDistribution(配信用)の証明書がインストールされていること
  • iOS Provisioning Portal に、AdHoc用アプリをインストールする対象端末のUDIDが登録されていること
  • 対象端末のUDIDが登録されたDistribution用provisioningファイルを取得してあること

の3つの準備がされていることを前提とする。

オーガナイザにAdHoc用provisioningファイルを登録する

この手順はまだやってなければ前回と同様に必要。

Xcode4の画面の右上のほうに[Organizer]というボタンがあるのでそれをクリックし、オーガナイザを表示する。

次に、オーガナイザの[Devices]タブを選択し、オーガナイザの左側のリストから[LIBRARY]→[Provisioning Profiles]を選択する。

すると、オーガナイザには現在登録されているprovisioningファイルの一覧が表示されるため、そこに今回用のAdHoc用provisioningファイルをドラッグ&ドロップして登録しておく。

f:id:tokorom:20110425013730p:image

Let's Archive!

デフォルトではArchiveを実行すると、Release用Configurationが利用されるようになっている。

AdHoc用として特に変更する内容がなければそのままRelease用設定を使えばOKということ。

ということで、Release用Configurationが利用されるデフォルト設定のまま、Xcode4のメニューから[Procust]→[Archive]と選択してArchiveを実行する*1

すると下図のようにArchiveした結果の一覧画面みたいのが表示される。

f:id:tokorom:20110425015414p:image

ここで[Share...]ボタンをクリックすると、出力方式として「ipa」が選択可能になっている。

f:id:tokorom:20110425015415p:image

ここでipaを選択し、Identityの項で"AdHoc用provisioning"をきちんと選択さえすれば、あとは[Next]ボタンを押して出力するだけ。

ipaファイルが出力できたら、これまでどおりiTunesに

  • ipa
  • provisioning

の2ファイルをドラック&ドロップして同期をとってAdHocアプリのインストール完了です!

まとめ

なんと、こんな簡単なことだったのか!

要するに、novi_さんからのご指摘どおり、Archive実行後にAdHoc用のprovisioningファイルを選択してSignするだけ。

前回記事に書いたように、律儀にAdHoc用のConfigurationを作るのは

  • Release用ConfigurationとAdHoc用ConfigurationでCode Signing以外に変更すべき箇所がある場合

のみということでしょう。

*1:Archiveが実行できない場合、Destinationが実機向けになっていることを要確認

NamfonNamfon2012/02/05 11:56You're on top of the game. Thanks for sahirng.

pwuoiniipwuoinii2012/02/05 23:27XoApRo <a href="http://uwonnqrubqkf.com/">uwonnqrubqkf</a>

ksjaflupngwksjaflupngw2012/02/07 22:05x6auYW , [url=http://ummczstbdrte.com/]ummczstbdrte[/url], [link=http://ptymfcamjcyn.com/]ptymfcamjcyn[/link], http://eorivdakqmdq.com/

gwniqecldvigwniqecldvi2012/02/10 23:51GShFEG <a href="http://rjcdrwhnwmkq.com/">rjcdrwhnwmkq</a>

wmochxucwmochxuc2012/02/12 01:35frSunT , [url=http://ntbtunnxrjmu.com/]ntbtunnxrjmu[/url], [link=http://ktoerrvgkfkb.com/]ktoerrvgkfkb[/link], http://hehaidhlfyno.com/

guestguest2012/07/21 11:05Ad hoc版を作る場合はProvisioningファイルはIPAといっしょにiTunesにロードするので、Organizerでデバイスをつないだり、Provisioningをそのデバイスにロードする必要はないのではないでしょうか。もちろんしてもかまいませんが。

tokoromtokorom2012/07/25 00:12個人的にはプログラマはiTunesを使わずXcodeだけでAdhoc版のインストールまでしてしまうのがオススメです♪
インストール時にエラーが発生した際なども原因が分かりやすかったりします。

2011-04-24

Xcode4でのAdHocアプリ(ipa)の作成方法詳解

| 01:57 | はてなブックマーク -  Xcode4でのAdHocアプリ(ipa)の作成方法詳解 - iPhoneアプリ開発まっしぐら★

はじめに注意!

この記事を書いた後にTwitterでもっと簡単な方法があるよというのをご教示いただきました。

そのため、より簡単な方法については、次の記事をご参照願います。

こちらの記事は、

  • AdHoc配信用に専用の設定(Configuration)が必要な場合

のみご参照ください。

Xcode4になって

どうもこれまでと同じかんじではAdHocアプリを作成できないとか。

自分の場合、今日までXcode4さえインストールできていなかったので、これを機会にXcode4をインストールしてAdHoc用ビルドをしてipa形式で出力するところまでを試してみようと思い立った。

なお、基本的には

のとおりにやっただけ。

そのため、英語がNGでないかたは↑をそのまま見てもらったほうがよいかと。

以下、基本的にはXcode3→Xcode4の差分しか記載しておりません。

事前準備

この記事は、Xcode3以前でAdHocなアプリをビルドした経験のあるかたを対象とし、provisioningファイルの作成やCertificationについては言及しない。

そのため事前に

  • 自分のPCにDistribution(配信用)の証明書がインストールされていること
  • iOS Provisioning Portal に、AdHoc用アプリをインストールする対象端末のUDIDが登録されていること
  • 対象端末のUDIDが登録されたDistribution用provisioningファイルを取得してあること

の3つの準備がされていることを前提とする。

オーガナイザにAdHoc用provisioningファイルを登録する

この手順は基本的にはXcode3までと同じである。

Xcode4の画面の右上のほうに[Organizer]というボタンがあるのでそれをクリックし、オーガナイザを表示する。

次に、オーガナイザの[Devices]タブを選択し、オーガナイザの左側のリストから[LIBRARY]→[Provisioning Profiles]を選択する。

すると、オーガナイザには現在登録されているprovisioningファイルの一覧が表示されるため、そこに今回用のAdHoc用provisioningファイルをドラッグ&ドロップして登録しておく。

f:id:tokorom:20110425013730p:image

AdHoc用Configurationを作成する

まずはXcode3のときと同様にAdHoc用のConfigurationを作成する必要がある。

Xcode4では、まず、該当PROJECTを選択し、[Info]タブを選択する。

すると、下図のようにDebugとReleaseというConfigurationが並んでいるはずなので、ReleaseをベースにしてAdHocを追加することにする。

それには、Configurationsの下にある[+]ボタンをクリックし、「Duplication "Release" Configuration」を選択する。

f:id:tokorom:20110425013731p:image

すると、Releaseをベースとした新しいConfigurationが作成されるので名前を "AdHoc" に設定する。

AdHoc用ConfigurationにAdHoc用のprovisioningファイルを設定する

次に、AdHoc用ビルドの際に、AdHoc用のprovisioningファイルが利用されるように設定する。

該当PROJECTを選択し、今度は[Build Settings]タブを選択する。

Xcode3までと違い、各Configurationの設定項目がマージされた形で表示される。

この中の[Code Signing]→[Code Signing Identity]→[AdHoc]→[Any iOS SDK]の値の部分をクリックし、先ほどオーガナイザに登録したAdHoc用provisioningファイルを選択する。

f:id:tokorom:20110425014016p:image

SchemeのArchiveの項でAdHoc用Configurationが利用されるよう設定する

次に、Schemeの設定を変更する。

Schemeの設定変更は、Xcode4の左上の下図の赤枠のところをクリックし「Edit Scheme...」を選択することで可能。

f:id:tokorom:20110425015238p:image

こうして表示した編集ダイアログの左から「Archive」を選択し、「Build Configuration」の項をさきほど作成した「AdHoc」に変更する。

あとは、Desitinationも「iOS Device」にしておく*1

これで[OK]ボタンをクリックすれば、Schemeの設定変更は完了。

f:id:tokorom:20110425015239p:image

Let's Archive!

あとは出力するだけ*2だ。

Xcode4のメニューから[Procust]→[Archive]と選択してArchiveを実行する*3

すると下図のようにArchiveした結果の一覧画面みたいのが表示される。

f:id:tokorom:20110425015414p:image

ここで[Share...]ボタンをクリックすると、出力方式として「ipa」が選択可能になっている。

f:id:tokorom:20110425015415p:image

ここでipaを選択し、Identityできちんと該当のAdHoc用provisioningを選択さえすれば、あとは[Next]ボタンを押して出力するだけ。

ipaファイルが出力できたら、これまでどおりiTunesに

  • ipa
  • provisioning

の2ファイルをドラック&ドロップして同期をとってAdHocアプリのインストール完了です!

*1:実機が接続してある場合には違う名前になってるかも

*2:もちろんふつうにアプリがビルド可能な状態であること

*3:Archiveが実行できない場合、Destinationが実機向けになっていることを要確認

MarianaMariana2012/06/01 13:12I told my granmodther how you helped. She said, "bake them a cake!"

gdilfqgdilfq2012/06/02 03:01Y5i6Wr , [url=http://gaenigrikloh.com/]gaenigrikloh[/url], [link=http://scudrramdngr.com/]scudrramdngr[/link], http://abqodwlgedxy.com/

tnkdvdwnwlwtnkdvdwnwlw2012/06/04 05:28ReVBOd , [url=http://nwaolnepikjw.com/]nwaolnepikjw[/url], [link=http://wsiinxrcwgfu.com/]wsiinxrcwgfu[/link], http://dkfjrgrlvqyl.com/

guestguest2012/07/21 10:36参考になりました。でも、provisioningとcertificateがごちゃまぜになっているように思いました。

2010-04-21

リリースビルド時にNSLogを自動で一括削除する(Snow Leopard対応版)

| 23:57 | はてなブックマーク - リリースビルド時にNSLogを自動で一括削除する(Snow Leopard対応版) - iPhoneアプリ開発まっしぐら★

以前に、コードの中のNSLogをリリースビルド時に自動で一括削除するために、以下のようにNSLogマクロで置き換えるという記事を書いたのですが、

#if !defined(NS_BLOCK_ASSERTIONS)

#if !defined(NSLog)
#define NSLog( m, args... ) NSLog( m, ##args )
#endif

#else

#if !defined(NSLog)
#define NSLog( m, args... )
#endif

#endif

Leopard -> Snow Leopard にバージョンアップしてSDKも更新したら、NSLogの使い方(NSStringオブジェクトをそのまま渡しているところなど)によっては以下のWarningが出てしまうようになりました。

warning: format not a string literal and no format arguments

どうやらNSLogの宣言に引っ付いているフォーマット文字列のチェックで警告が出されているようです。↓の__attribute__のところ!

FOUNDATION_EXPORT void NSLog(NSString *format, ...) __attribute__((format(__NSString__, 1, 2)));

※__attribute__についてはコチラを参考にさせていただきました。


あくまでもNSLogを使う側の記述は変えないで対応させたいので、NSLogマクロの定義を以下のように変更してみました。

※4/23 さらに改善!

#if !defined(NS_BLOCK_ASSERTIONS)

#if !defined(NSLog)
#define NSLog( args... ) NSLog( args, 0 )
#endif

#else

#if !defined(NSLog)
#define NSLog( args... )
#endif

#endif

これでWarningがきれいさっぱり消えてくれました。

やったー!

※NS_BLOCK_ASSERTIONSのところは、もちろん自分専用のデバッグ用フラグ(_DEBUG_とか)を定義してそれに置き換えてもOKです。


トリック

よくよく調べてみると、警告文↓

warning: format not a string literal and no format arguments

が、「フォーマット文字列のリテラルでもなく、そしてフォーマット用の引数が1つもないよー」とおっしゃっているそのままで

NSString* message = @"test";
NSLog( message );

みたいに単一の引数でオブジェクトを渡しているところで警告が出ていたわけです。

ということで、 単一の引数でなくしてやればよいのではと思い、

#define NSLog( args... ) NSLog( args, 0 )

というように、NSLogを使ったときは強制的に最後にダミー引数「0」を追加するようにしてやったということです。

これにより、↑の警告が出ていたサンプルはプリプロセッサにより

NSString* message = @"test";
NSLog( message, 0 );

と置き換えられ、NSLog関数に__attribute__で付加されたフォーマット文字列チェックを抜けることができたのです。

sakamotosakamoto2010/04/22 13:34#define NSLog(...) do {} while (0)
#define NSLog(...) NSLog(__VA_ARGS__)
でいかがでしょうか? @splhack

sakamotosakamoto2010/04/22 13:35同じ名前でdefineしてちゃ駄目ですね。

tokoromtokorom2010/04/22 14:07ひとまずGNUだと__VA_ARGS__が使えないみたいっす。
でもマクロの引数を可変引数のみにしちゃうというのは試していなかったので、帰宅したらさっそく試してみます!

tokoromtokorom2010/04/23 01:59おー、sakamotoさんのコメント↑のやつは、__attribute__をどうにか外すのはどうか、という意味だったんですねー。ぼくもちょっと考えてみます。

tokoromtokorom2010/04/23 02:33__attribute__についてちゃんと調べてみたら、改善案に辿りつけました!あざーす!

nasu3nasu32011/10/26 19:11Xcode4.2にすると、また"data argument not used by format string"という警告が出てしまっていたので、再度
#define NSLog( m, args... ) NSLog( m, ##args )
こちらに戻したら、出なくなりました。ご報告まで。