2011年01月

Xcodeで"Base SDK Missing"になったら

Xcode3.2.5にバージョンアップしたら過去に作成したiPhoneアプリが「Base SDK Missing」となりビルド出来なくなってしまいました。その時やった対処法です。

・Xcodeのメニューの「プロジェクト」→「プロジェクト設定を編集」→「ビルド」タブ、「ベース SDK」を「Latest iOS(currently set to iOS 4.2)」にする(必要ならばiOS 4.2とかに設定しても大丈夫なはず)。
・これで動くか確かめる。
・だめならXcodeを再起動して正しく実行できるか確かめる。

ここまではよくある話。これでも直らなかったら以下を実行。以下の工程はパスワードを設定する場面もあるので、ちゃんと管理しましょう。

・「キーチェーンアクセス」を起動。
・「ログイン」欄に登録されてる証明書を全部選択して右クリックし、書き出しを選んで適当な場所に退避しておく(次の工程で自動的にバックアップは作成されますが、一応)。
・メニューの「キーチェーンアクセス」→「環境設定」→「一般」タブ、「自分のデフォルトキーチェーンをリセット」を実行。
・Xcodeを再起動して正しく実行できるか確かめる。
・正しく実行できてるのを確認して、キーチェーンアクセスを元に戻す。
・元に戻しても他のプロジェクトでもちゃんと動くはず。


補足
「xcode_3.2.3_and_ios_sdk_4.0.2.dmg」から「xcode_3.2.5_and_ios_sdk_4.2_final.dmg」にバージョンアップしたらこうなりました。

参考文献
Xcodeで「Base SDK Missing」と表示されてビルドできない - D-ramuの日記
アップデート後の実行エラーについて その2|無知の状態からiPhoneアプリ開発に挑んでみる

僕がiPhoneアプリを出すまでにやった事・調べた事

このiPhoneアプリをリリースするまでにやった事を一度まとめてみました。この記事書いたのはuechocoさんに言われたのがきっかけ。

■完成したもの
iPhoneアプリ「CheckTrend」をバージョンアップしました(ver1.3) - えんたつの記録
iTunesでダウンロード


■自分の基本スペック
・データ処理にR書いてる程度。きちんとソフトウェアを作った事は無い。
・Cは大学の授業プラスα程度。Windowsアプリを6-7年前に書いた事ある気がするけどもう忘れました。
・Objective-Cを触った事が無い。
・iPhone実機持ってない。
・アルバイトで技術調査したりとか、プログラムほんのちょっとだけ書いたりとかした事はある。
・アルバイトの勉強がてら、自分でもiPhoneアプリ出せたら面白いと思いMacBookを購入。人生初Mac。


■資料
公式の資料がとても丁寧です。
iOS Reference Library
とりあえず必要そうなものに目を通してみましょう。

本は以下のものを読みました。
iPhone SDK 3 プログラミング大全 実践プログラミング (MacPeople Books)
木下 誠
アスキー・メディアワークス
売り上げランキング: 159271

Objective-Cの解説はありがたかったですが、iPhone向けプログラミングの部分はそれなりの感じ。

その後は以下の本を読みました。
iPhoneプログラミングUIKit詳解リファレンス
所 友太
リックテレコム
売り上げランキング: 23425

UIKitに関する部分がかなり勉強になりました。こちらがおすすめです。


■開発者登録と環境作り
プログラミングにはXcodeを使います。iOS SDK自体はお金を払わなくても開発者登録をすれば使えるはずです。アプリの公開にはiOS Developer Programへの登録が必要です(年間¥10,800)。なのでアプリを公開する段階になったらお金払って登録しましょう。
iOS Developer Programへの登録方法 - えんたつの記録
これの契約更新を忘れるとどうなるのかはこちらが参考になります。
App Storeから全アプリがDL出来ない状態になってしまった件に関するお詫びとその顛末 - frnk*blog


■練習に書いてみたサンプルアプリ
とりあえずソースコードを落としたりして色々遊んでみました。その延長で、こちらを実際に自分でプログラミングしてみたりとか。
iPhoneアプリを作ってみよう:目次エントリー - もとまか日記
丁寧な解説付きで1からプログラムを書いているサンプルはあまり無いので、かなり助かりました。ここでTabbarの使い方やUIWebViewの使い方を勉強。Interface Builderの使い方がありがたかったです。


■設計
どう画面が遷移するか、データはどこから持ってくるかとか、アプリの設計。紙にイラスト書いたりした程度で、難しい事はやってません。
企画・設計の段階で一度リジェクト基準に目を通しておきましょう。
fladdict » iPhoneアプリ審査での111の禁止項目(意訳)

何をすべきか、何ができるのかが全くわからなかったので、おおまかに設計しました。何かしたい事ができたら公式の資料を読んだり、逐一ぐぐって進めていきます。


■アプリレイアウト
自分の設計はどうやればアプリになるのか、基本的な枠組みを組み立て。
Navigation-based ApplicationとTab Bar Applicationって違うテンプレートで、両方が入ったテンプレって用意されていません。なので今回のようにTab Bar Applicationの中にNavigation-based Applicationを作るにはちゃんとInterfaceBuilderを操作する必要があります。こちらの資料が参考になりました。
iPhoneアプリ開発、その(157) 親ガメはどっちだよ?|テン*シー*シー
本当はテンプレに従って作成していくのが良さそう。


■RSS取得部分
今回作成したアプリの中身はRSSリーダーです。
現在CheckTrendは非同期通信を行っていますが、最初は同期通信でした。一度通信が始まると、通信が終了するまで動作はできないという仕様。参考にしたのはこの記事です。
iPhone SDK Tutorial: Build a Simple RSS reader for the iPhone: Apple News, Tips and Reviews «
本当はこちらの記事を参考にしていきたかったのですが、どうしても動作させられなかったんでこちらに。

最新バージョンではRSS取得部分を非同期通信にしました。これでデータ読み込み中でもちょっと操作できます。参考にしたのはこの記事
iOS 4のSDKで、Twitterを使ったiPhoneアプリを作る(1/4) - @IT
twitter向けの解説ですが、ちゃんと読んで一部改造するとRSSの読み込みに使う事が可能です。この記事の方法でUITableViewのデザインも、今までデフォルトのものだったのを改良しました。(自分のアプリではここはまだ改良しないといけなそうな部分)

あと、XML ParserについてNSXMLParserを使うかlibxml2を使うかとか色々選択肢があります。速度比較の資料はこちら。
How To Choose The Best XML Parser for Your iPhone Project | Ray Wenderlich
NSXMLParserからlibxml2に変えた例
iPhone用「ITproアプリ」2.0登場! - インフォメーション:ITpro


■RSS生成
Yahoo!pipesで生成しています。google急上昇ワードとかはRSS形式でデータが配布されていないので、これを適当に加工します。正規表現の資料とか読みまくりました。
それにしてもgoogle急上昇ワードのrss生成が不安定ですね。yahoo!pipes以外の手段を考えるべきかもしれません。


■ローカライズ
日本語と英語で処理を切り分ける必要があったので色々いじります。

・言語毎に表示する文字列を変える場合
この辺りを参考にしました。
A-Liaison BLOG: iPhoneアプリをローカライズ(国際化対応)してみた
iPhone/iPadアプリ作成の仕上げ・国際化・デバッグ(2/4)- @IT

・言語毎に違う処理をしたい場合
iPhone本体の言語設定により処理を分ける事ができます。
[iPhone SDK] 日時のローカライズ | Mac, iPhone, iPad


■広告挿入
広告はiAdとAdobで迷ったのですが、iAdはまだ日本向けに提供されていないのでAdmobにしました。
最初はUITableViewに広告を入れていました。方法はこちら。
AdMobの広告をUITableViewに表示する方法 - Tomute’s Notes
でも起動時にUITableViewを表示する為、起動時間が長くなる気がしたので、現在のバージョンではUIWebViewの下に広告エリアに作り直し。表示回数もクリック回数も激減したので、まあおまけみたいなもんです。

なおiAdは国内展開を電通が行う事が決定しました。将来的には日本でもiAdが表示されるようになります。今まで広告が無いと思ってたアプリに広告が出現・・・なんて事も考えられます。
Appleと電通グループ、日本でiAdを展開


■UIWebView部分
UIWebViewは「target="_blank"」が指定されたaタグを開くことができません。そこは自分で設定してやる必要があります。ネット上に解決策が何通りか存在しますが、結局どれが審査を通るのかは不透明です。。
また、デフォルトだとWeb画面が拡大されたまま拡大縮小ができないので設定が必要。
UIWebViewが拡大表示される - marcy_oの日記


■twitter連携
ShareKitという素晴らしいフレームワークを使って実現しました。コード追加したら簡単にボタンからtwitter投稿ボタンを設置できます。twitterだけでなく、アドレスを自動的にbit.lyで短縮してくれたりと本当に便利。Facebookにも投稿できます。この段階でtwitterやFacebookなどのAPI Keyの申請をしまくりました。英語ばっかりですが入力事項は多くないので簡単です。sharekitの使い方はこちらの記事が参考になります。
ShareKitを使ってiPhoneアプリのTwitter連携にトライ - Tomute’s Notes


■インジケータ表示
最初のバージョンでは画面上部に小さく読み込み中を表すインジケータを表示しているだけでしたが、待ち時間を少しでも短く感じてもらう為に必要と思い、インジケータをでっかく表示する事に。この記事のフレームワークを使用しました。
MOONGIFT : iPhoneアプリの読み込み時表示に「MBProgressHUD」 オープンソース・ソフトウェア/フリーウェアを毎日紹介
簡単に組み込めて、かつ見栄えが良いです。


■細かい話
色々細かい話も。

・異なるiPhoneのバージョンに対応するためのビルド
iOS 4.0 と iPhone OS 3.x の両方で動作するアプリケーションをビルドする設定 - 24/7 twenty-four seven

・Tabbarを一時的に非表示にする
TabBarを非表示にする: iPhoneアプリ開発備忘録

・アイコン作成。絵、描けません。GIMPSeashoreを使ってどうにかしました。平坦な画像を描いても、iTunes側で自動的に光沢を付けたり四隅をまるっこくしてくれます。
こういうサイトでちょっと作ってみるのも良いかも。
iCone


■公開
英語と日本語でアプリの説明文とか書いてスクリーンショットも用意して提出。3日~1週間で公開されました。
レーティングは正直に設定したら17になりました。画像表示するアプリだとレーティングは高めになるかも。

実機テストをやっていないので気づかなかったバグが。
・透過pngの扱いがシミュレータと実機で異なるらしく、シミュレータ上で表示が正常だったpngが実機では真っ黒に。「プレビュー」とかで設定し直したら正常に表示できました。
・シミュレータと実機で実行速度が違います(シミュレータがとても速い)。体感速度は実機で測定しないと意味が無いです。
・通信速度が遅くないとデバックしづらいので、「SpeedLimit」というソフトを入れて実験するようにしました。
ネットワークの通信速度を制限する Preference Pane "SpeedLimit" - 24/7 twenty-four seven


■わかったこと
出してみてわかったこと。

・最初から高いクオリティで出すべき
アプリ公開直後は無名アプリでもある程度のダウンロードがあります。ここでバグだらけだったり使いづらいアプリだとその後見向きもされないので、最初から高いクオリティを狙うべきです。また、新着アプリを機械的にコピペしているサイトがいくつかあるようなので、そこに掲載されるときに目立てるようなデザインにしたい所です。そういったサイトはバージョンアップに合わせて記事を更新とかしないので。。

・アプリ申請から受理までの期間はわからない
リジェクトもありえる為、予測がつきません。自分で指定もできるのですが、ランキング掲載に不利になるという噂も(ランキングに入らない僕には関係ないですが)。

・海外からも結構ダウンロードされる
僕のアプリの場合、日本からのダウンロードと同じかそれ以上に海外からダウンロードされているようです。海外も視野に開発するのも面白いかも。

・赤字です
沢山ダウンロードされて、頻繁に広告がクリックされるアプリを作らないと当然ながら赤字です。。まあ1万円支払えば世界に 向けてアプリが作れるので、勉強料としては安いかなと。

iPhoneアプリ「CheckTrend」をバージョンアップしました(ver1.3)


「CheckTrend」のバージョンアップを行いました。これでバージョン1.3です。こちらからダウンロードできます。このバージョンでCheckTrendの開発は一旦落ち着く予定です。
iTunesでダウンロード

■更新点
・デザインリニューアル!
・投稿先がtwitter・Facebook等に加えEvernoteにも対応しました。(ShareKitを使用させて頂きました)
・データ読み込み中操作できなかったのを修正しました
・高速化した…はずです。


■アプリについて
流行キーワードを一覧で表示するアプリです。手早く今話題の事を知るのに特化しています。
Googleトレンド(毎時更新?)
Yahoo!急上昇ワードランキング(ほぼ毎日更新)
MSN気になる言葉週間急上昇ランキング(毎週更新)
buzztter(twitterで呟かれている言葉。ほぼリアルタイム)
Amazon.co.jp本のヒット商品 (過去24時間で最も売上が伸びた商品)
と、更新頻度の異なるサービスを混ぜたので、広く流行や関心事がわかります。

今回のバージョンから、見ているページを様々なサイトに投稿できるようになりました。対応しているのは以下のサービスです
・Twitter
・Facebook
・Tumblr
・Delicious
・Google Reader
・Instapaper
・Pinboard
・Read It Later
・Evernote
・メールで送信
これらはShareKitにより実現しています。
現在、ログアウトを実装していません。なので、複数のアカウントを使い分けている人、すみません。


■英語版
このアプリは英語版も同時にリリースしています(iPhoneの言語設定を英語にすれば見れます)。英語版では、
・キーワードを機械翻訳により日本語と英語で同時に表示
・キーワードをタップすると、Google Translateを使って英語に翻訳したサイトに接続
という動作をします。

■イメージ
ssJ-v13-01 ssJ-v13-02 ssJ-v13-03 ssJ-v13-04


■その他
・データ取得や切りかえのタイミングにより、データに数時間程度の遅れがある場合があります。
・データが取得できない時は、一度左上の更新ボタンを押してみてください。それでだめならすみません。。


■使用したフレームワーク
ShareKit、twitter投稿等に使用しました。
MBProgressHUD、読み込み中の状態表示の為に使用しました。


■今後やりたいこと
・Evernoteにデータを送れない事が多いのをどうにかしないと。。



■Sharekit License

ShareKit is open source as described by the MIT license:

Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE


■MBProgressHUD License

This code is distributed under the terms and conditions of the MIT license.

Copyright (c) 2009 Matej Bukovinski

Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

Extensive documentation is provided in the header file (MBProgressHUD.h).
このサイトは
 Webアプリケーション開発のことや、iPhone・Android向けアプリ開発の話題がメインです。技術情報を取り扱っています。
 管理:えんたつ。twitter: @tattyamm
mimage
カテゴリ別アーカイブ
RSS
リンク
プログラミング本
アプリを作る時などに読んだ本
iPhoneプログラミングUIKit詳解リファレンス iPhoneプログラミングUIKit詳解リファレンス Android Layout Cookbook アプリの価値を高める開発テクニック パーフェクトPHP (PERFECT SERIES 3) JavaプログラミングBlack Book 2nd Edition (Black Bookシリーズ)
表記
当サイトではGoogle Analyticsを使用しております。詳細はこちらを御覧ください