冬休みに読んだiOS本

年末、年始に読んだiOS本いまさら紹介。なんか最近、初心者向けの本より中級者、上級者向けの本が増えてきた気がするけど気のせいかな。

上を目指すプログラマーのためのiPhoneアプリ開発テクニック iOS 7編

どちらかというと逆引きTips系の本ですぐに役に立つかは人(プロジェクト)によると思うけど知識を貯める面でひと通り読んでおいて損はない。地味にXcodeの新機能の紹介が役に立つ。

Effective Objective-C 2.0

2/3か3/4くらいは知っていることだけどやっぱEffective系は手元においておきたいと思う。とりあえず買うべし。

iOS 7デザインスタンダード 最新のフラットデザインに対応

ブラウザSleipnirを開発している人が書いた本。フラットデザインというよりかはUI開発プロセス全般について記載されているのでUI開発に疎い人は読んでみるといいかもしれない。大きい会社にいる人は大体知っていることだろう。

アプリ/Web開発者のための フラットデザインガイドブック

これはiOS本じゃないけど、iOS7/Android/Windows8のフラットデザインについて違いやフラットデザインの本質についてまとめてあるので変にiOS7やWindows8本を買うよりも良いと思われる。

その他

まだ積読。

Core Data使ったことあるけどマイグレーション周りが気になっている。

どれか一冊すすめるとしたらやっぱり、「Effective Objective-C 2.0」かな。

趣味でつくるiOSアプリこそJenkinsでリリースを自動化・余談

iOS Advent Calendar 2013にて趣味でつくるiOSアプリこそJenkinsでリリースを自動化 という投稿を挙げた。余談に書きたいことが増えてきたのでどうでもいい話をブログですることにした。

自動化のキッカケはもちろん時間を捻出するためだけど、売るタイミングを逃したMacBook Airに息吹を吹き込みたかったという理由もあった。

Jenkinsの情報は検索すると見つかるのだが、Profileを動的に切り替えたいとか、CocoaPods使いたいとか、どうも痒いところに手が届かないことが多くてある2つの仮説を立てていた。

1つは情報が大きな会社で止まっている。有名な会社でJenkinsなどで自動化しているという話はよく聞いていた。実際にこう使っていますという話を聞く機会もあったけど設定項目にはこう書いていますなど細かい応用話は社外にはしにくいのではないかなと予想する。だからざっくりとした情報しか見つからない。

もう1つの負の仮説は単に需要がない。つまり個人や中小企業でそこまでやろうと思う人がいない。やりたいことが見つからないと「こんなことやりたいのは世界で俺だけじゃないのか?」という疑念に押しつぶされそうになる。正直この不安があったのでタイトルに「趣味でつくるiOSアプリこそ」とつけて確かめてみたかったんだけど評判を見る限りやはりみんな興味は持っていたようだ。役に立つことを祈る。

仮説3、単に俺の探し方が悪い。

置き場所

Jenkins Server

ふつーに困っているんだけど。外部ディスプレイに出力していないので蓋を閉めるとスリープしてしまう。軽く空けた状態で置いているのだが写真でみるように適切な置き場がない。

探すと蓋を占めてもスリープさせないようなツールもあるんだけど、ビルド時間が長くないことと、マシンの寿命を延ばすためにスケジュールで一日の多くを眠らせている。この辺りの処理と干渉しそうで怖いのでスリープ防止ツールは試していない。

またこんな需要があるの俺だけなんじゃないのかと不安になるんだけど100均かどこかで蓋を軽く空けたままで止めれる何かを探して縦置きしたいと考えている。

Mac Airに貼るJenkinsステッカー欲しい。

Chromecast Preview SDKと格闘

Chromecast Preview SDK(Google Cast SDK)とと格闘しつつ、iOSのサンプルアプリを動かせたのでQiitaにアップした。これを書いてるうちにPreview SDK 1.0.1がリリースされてしまったのでこの内容はPreview SDK 1.0.0での内容となる。

Chromecastは1ShopMobile.comで購入。いつもお世話になってます。

Chromecast開封の儀

パッケージはすごくシンプルでこの中に小さな説明書とケーブルがある。電源供給はUSBから行うという仕様。iOS/AndroidアプリだけでなくPCからも連携できてYouTubeサイトから動画をChromecast経由でテレビに移したりできる。またChrome拡張機能を入れるとPCのChromeで表示しているページをChromecastに飛ばすことができるのでニコニコ動画のページを表示することも可能である。

Chromecastでニコニコ動画

単にPC(Chrome)の画面を出力するならAppleTVと同じではあるし、PCから操作しないといけないという不便さもあるが3,500円程度で販売されるなら買いだろう。

PCで操作が不便ということならiOS/Androidから操作できればよい訳でSDKを使って実装するという話になり冒頭の格闘に戻る。

すべての罠にひかかったんじゃないかとうくらい嵌った。Preview SDKはシリアル番号やURLを申請して使う必要があるのだけどまずシリアル番号の1とIを読み違えて出鼻をくじかれた。申請時に目視確認したのに間違えた。幸い0とOは混じってなかったが混じっていたら区別がついたかどうかはわからない。

その後も設定を変えないとダメとか、ChromecastがGoogleのDNSサーバを直接見るからMacで実行してるウェブサーバにうまくにつながらずその原因に気がつくまで四苦八苦したり、いろいろわからないのでAndroidのサンプルを動かしてみたらiOSと手順ちがうじゃねーかよということでRecieverアプリ側にもAppIDの設定が必要と気がついたり散々だったがちゃんと動いた。でもまぁ、Preview版とかBeta版を使う時はこういうことはよくあることで挫けて諦めたらそこで試合終了ですよ。

ChromecastDemo

残念ながらChromecastはHTTP Live Streamingをサポートしていないということで今作っているガラポンTV iPadアプリの動画をChromecast経由で画面に映すということは頓挫しているのだがChrome拡張機能のようにページをビットマップか何かで送信することがSDKで可能なら無理やり映すことはできると思われる。

iPhone 5とiPad miniをiOS 6.1にアップデート

iPhone 5, iPad mini共にiOS 6.1にアップデートした。調子にのってXcodeも4.6に更新。

ところでアップデートするときにiCloudのアップデートなんちゃらかんちゃらでApple IDログインさせられたのだがマイナーアップデートでも毎回ログインしないといけないのだろうか。それともiCloud絡みのときだけなのだろうか。

Apple PressInfo Apple、iOSを6.1にアップデート
http://www.apple.com/jp/pr/library/2013/01/28Apple-Updates-iOS-to-6-1.html

サポート iOS 6.1 ソフトウェア・アップデート
http://support.apple.com/kb/DL1624?viewlocale=ja_JP

電子書籍ビューワーとしてiPad miniとNexus 7を比較してみた

2012/12/07 iCouldバックアップ問題 を追記しました

以前、書いたNexus 7に自炊した書籍を入れて持ち歩くぜのiPad mini版。

iPadで自炊した電子書籍を読む方法

iPadで自炊した電子書籍を見るアプリとしてはiBooksがある。iBooksはストアで購入した電子書籍以外の書籍も管理できるようになっている。iBooksに自炊した電子書籍をインポートするにはまずPC側のiTunesにブックを管理させiPadと同期するという手順を踏む。

参考: iBooks:iBooks および iBookstore に関してよくお問い合わせいただくご質問 (FAQ)

Q. ほかの Web サイトからブックをダウンロードできますか?
A. はい。ePub ファイルおよび PDF ファイルを、Mac または Windows パソコン にダウンロードできます。「ファイル」>「ライブラリに追加」の順に選択するか、ePub ファイルまたは PDF ファイルをコンピュータの「ブック」ライブラリにドラッグして、ファイルを iTunes ライブラリに追加します。これらのブックは、サポートされているフォーマットでデバイスに同期するだけで読むことができます。

やり方は普通の手順なのだが、いくつか音楽ファイルの同期と比べて異なる点があるようなので上げてみる

  • フォルダをiTunesでドラッグしても追加されない(ファイルをドラッグする必要がある)
  • ファイルを追加するときにファイルをコピーする設定になっている場合は~/Music/iTunes/iTunes Music/Books以下にファイルが配置される
  • ファイルのメタデータを変更しても同期されない(PDFで確認。メタデータを更新するためにデバイス側のファイルを削除しないといけない)

ほんの少し不便なのだが慣れてしまえば対策は取ることができる。例えばブックの著者名はiTunesではアーティスト項目の編集で設定できる。iBookから本の著者名で分類することができるのでその機能を使いたい場合は同期する前に著者名を設定しておくと良い。

もともとAndroidの場合はファイルの転送は単にSDカードへストレージとしてコピーするだけで済んだのでiTunes経由で転送するのは面倒だと思っていたのだが、実際のところSDカードへドラッグするかiTunesへドラッグするかという違いでしかなく、iTunesの同期を実行する手間くらいしか増えていないのであまり問題にはならなかった。

ちなみにiTunesにはWiFi経由でiOSと同期する方法があるのだが、電源に接続していないと実行できないようでLightning対応のdockなどが出ていない現状だと充電のためにPCに接続してしまったほうが手っ取り早いため、あまり無線という恩恵を受けられていない。

Apple公式アプリiBooksの安心感

Nesux 7の時はどうやってデバイス上でブックを管理してよいかわからず、ファイルをストレージに置いてAdobe Readerでファイルを開くというなんかローレベルな方法で使っていた。多分もっと便利な使い方やアプリもあると思うのだがそれを探すこと自体が疲れそうなので諦めたところがあった。

それに比べるとiTunesやiBooksというAppleの公式アプリで自炊した電子書籍を管理できるというのはやり方に悩まずに済んでありがたい。Appleのアプリなのでそこそこちゃんとできている。たとえばiTunes/iBooksではPDFの1ページ目を表紙したリストも表示できたり検索もあるので探すのが楽になる。(ということであとでメタデータを付けたくなり、メタデータが同期されない問題が発生するのだが)

ちなみにAndroidでもPlayブックスというGoogle Play ストアで購入した書籍を読むアプリがあるようなのだが使ってみても自炊したファイルを読む方法はよくわからなかった。

Nexus 7との比較は甲乙つけがたい

Nexus 7 iPad mini
解像度 1280 x 800(216 ppi) 1024 x 768(163 ppi)
大きさ 120 x 198.5 x 10.45 134.7 x 200 x 7.2
重さ 340g 308g

輝度

気になるNexus 7との比較。最初Nexus 7のほうが明るさが読みやすく思えたのだがそれは輝度の設定に影響を受けていた。

輝度最高

輝度最低

iPad miniのほうが設定の幅、とくに暗い方に広いようなのだが実用性としてはNexus 7の幅で問題なく明るさについては問題にならなさそうだ。バッテリーの持ちまで検証するのは大変なのでそこはわからないが。

文字の鮮明さ

自炊した電子書籍は画像のようなものと考えるとイメージしやすい。よくiPad miniのディスプレイの大きさがよく取り出されるが解像度自体はNexus 7のほうが高い、つまりピクセル密度が高いので文字はややNexus 7のほうが鮮明に見え、多少の画面の小ささはカバーしているように見える。

ちゃんとした電子書籍の場合(Amazon Kindleの場合)

Android, iOSともにAmazon Kindleアプリがリリースされていて、Kindle端末がなくてもAmazon KindleアプリをインストールすればKindle向けの電子書籍をNexus 7, iPad miniで読むことができる。

さきほど、自炊した電子書籍は画像のようなものと考えたが、Kindle版はちゃんとした電子書籍でフォントの大きさを変更することが可能になっている。つまり画面のサイズや解像度にかかわらず自分に読みやすいフォントサイズを調整すればどちらの端末でも快適に読むことができるのであった。

まとめ

現状の使い方として自炊した書籍とKindle版の書籍を読む場合にiPad miniとNexus 7には大きな差は見つからず、輝度やフォントのサイズなど自分なりに調整すればどちらを使ってもそれなりに問題ないように思える。Nexus 7は画面が小さすぎるという人がiPad miniを使っても大きな改善を体感することはできないと思う、大きい画面を望む人はおとなしく10-inchのタブレットを使った方がいいだろう。

こうなってくると、どちらを使うかはもう好みの問題になってくる。強いてiPad miniのメリットを上げるならiBooksというApple公式ソフトで書籍が管理できるという点だ。AndroidでもできるアプリはあるだろうがiBooksは公式なので迷わないし、ウェブからの情報も見つけやすいだろう。

自分の場合、iPad miniがレギュラー化し、Nexus 7はまったく使わなくなってしまったがそれはiOSに慣れているからという点と、デザインが素晴らしい(薄いって素晴らしい)ことによる持っていることの優越感という部分が大きい。これはもう完全に主観である。

しかし、そもそもNexusシリーズはAndroid OSのパイロット製品という側面によりデザインやデバイスの使い勝手を追求できていないと予想する。そういう意味ではGoogleではなくソニーあたりが本気を出して世界最軽量、最大電池持ち時間の7-inch Xperia Tabletを出してくると比較の面では面白いと思う。

iCouldバックアップ問題

iCouldで容量が足りなくてバックアップができないという問題が発生した。どうやらiBooksに転送したPDFがそのままiCloudへバックアップされているらしい。圧縮はしてくれるだろうがiBooksのデータだけですでに5GBを超えていた。

設定アプリ > iCould > ストレージとバックアップ > ストレージを管理 > (自分のiPadの名前)

よりバックアップオプションを見て、iBooksの選択をオフにしておく。自炊したPDFは自分でバックアップをとっておこう。

#idevjp 第2回 iphone_dev_jp 東京iPhone/Mac勉強会 に行ってきた

第2回 iphone_dev_jp 東京iPhone/Mac勉強会に行って来ました。

一回目は行ったことなかったので初参加だったんだけど、なかなかコアで低レベルな話も多いし、かといってARCやStoryboardなんか使わずにガリガリ書こうぜというわけでもなく新しいものも使えるものは使っていこうぜ的なテンションがよかった。

個人的には以下が参考になった、というかタイムリー。
@k_katsumiさんのARCのベストプラクティスを考える
@fladdictさんのUITableViewハック
@cocoponさんのCore Graphicsでつくる自作UIコンポーネント入門
@k_kinukawaさんのmixiのiOSアプリ開発

メモとったけどあんまり共有できる気がしないのでセッションをまとめてみた。

発表者 タイトル 資料とか 一言感想
@fladdictさん UITableViewハック UITableViewでCoverFlowは作れるか CoverFlowじゃなくても参考になる
@k_katsumiさん ARCのベストプラクティスを考える blocksは確かに見落としてなぁ
@cqa02303さん AirPrintで遊んでみた slideshare tcpdump使いこなしたい
@sonson_twitさん InterfaceBuilder嫌いがStoryboardを愛するようになった訳 やっぱ便利だよね
@cocoponさん Core Graphicsでつくる自作UIコンポーネント入門 slideshare blog こういうのやりたかったんだよね
@studioshinさん ImageI/O完全攻略 slide(pdf) code(zip) Windowsアプリで似たようなことやってたなぁ
@cathandnyaさん iOSでリッチテキストエディタ blog slide code(github) 大変そうだけどWebView使うアイディアは面白い
@335gさん ざっくり iOS × GAE 体験 blog slideshare 自分が必要なものつくるのは重要
@kamiyanさん 簡単!OpenGL ES2.0フラグメントシェーダー slideshare OpenGLも使いたいなぁ
@takiuchiさん Cameraの露出を制御する Reflectionすげぇ
@k_kinukawaさん mixiのiOSアプリ開発 slideshare やっぱチーム開発やりだすとこうなるわなぁ

参考文献

@cqa02303さん、@sonson_twitさんが書かれた本。別の人が書いたBluetooth周りの話もあるということで早速予約。

@studioshinさんが書かれた本。Xcode自体にはあまり苦慮していないけど一応購入。

@kamiyanさんオススメの本、持ってるけどちゃんと読んでない・・・

iPhone OS 3.0 + jailbreak

jailbreak待ちだったのでみんなが3.0入れてるのがウラヤマシスだったのですが、3.0対応のPwnageToolがリリースされてみるたいです。勢いで3.0を購入して、iPod touch 1Gに入れてみました。

http://blog.iphone-dev.org/
(2009/06/20時点では) MacOSX用のPwnageToolのみのリリースです。Windowsで使えるQuickPwnもすぐにリリースされるようですが。yellowsn0wやってる人はなんかいろいろ書いてあるので読んだ方が良いかも。こちとらiPod touchなのでスルーです。あと、iPod touch 2Gはサポートしていないらしいので注意。

(iPod touchはclean(jailbreakしていない)な3.0な状態)
1. iPod touchをMacにつないでおく
2. PwnageToolをdevteamから落とす http://blog.iphone-dev.org/
3. iTunesを起動しておく
4. PwnageToolを起動する
— ExpertModeでいく
— iPod touchを選択する
— カスタムfirmwareをbuildする前にカスタムロゴのチェックを外しておく
— build後pwnaged済みかと聞かれたらNoと答える
— DFUモードに入るので言われたとおりにする、基本的に下記
— a) パワーボタンとホームボタンの長押し
— b) パワーボタンを放して、ホームボタンだけ長押し継続
— ここでiTunesでリカバリモードのiPod発見と言われ復元モードになる
5. PwnageToolをcloseする
6. iTunesからCustom Firmwareで復元する
— iTunesの復元ボタンをOptionキーを押しながらクリックし、Pwnageで作成したcustom firmwareを選択する
# IntelMacはCustom Firmwareのビルドがはえー

Windows上(cygwin上)でiPhone/iPod touchアプリの開発環境を構築する。iPhone OS 2.0対応の巻

iPhone OS 3.0 betaが公開されたので完全に周回遅れです。それでもやっぱりIntelMacが家にないのでWindowsで開発したいんです。1.xのときのメモが完全に役に立たない状態になってたので2.0でできないかを調べたらすごいのを見つけました。


http://www.maxhorvath.com/documents/programming_for_iphone_using_l/eclipse-iphone-cdt.pdf



あなたが神か。


eclipseで開発できる!iPhone SDKだとXcodeしばりでなかなか環境になじめず苦労するんですよね。早速この神の書を実行してみました。

Jailbreakとかの説明とかをすると説明が長くなってしまうのでここではその説明を省きます。以下の前提がある人を対象者としています。

  • 自分の使っているiPhone/iPod touchのバージョンがわかっている
  • 自力でjailbreakしてsshを追加し、有効にできる
  • cygwinやLinuxをなんとなく使ったことがあり基本的なlinuxコマンドはわかる
  • G4でLeopard買ったのにIntel縛りでiPhone SDK使えなかった人(俺のことか)

すみませんが、jailbreakとかcygwinの詳しい説明は別で調べてください。なお、この手順ではcygwinのユーザはmakoto_kwになっているのでコマンドは適宜置き換えて実行してください。またなんとなく自分の使っているfirmwareでやってみました。デバイスと同じfirmwareを使わないといけないかどうかはよく知りません。

Jailbreak
これをやらないと始まらないというか。エミュレータがないので動作確認できない。

  1. jailbreakする

    • がんばれ!
  2. OpenSSHとiPhone 2.0 toolchainを入れる

    • Cydiaから普通に
    • SSHのON/OFFやSpringBoardの再起動にはBossPrefsがおすすめ

cygwinのインストール
iPhoneにはまったく依存しない手順

  1. セットアップを落とす

  2. cygwinのインストール

    • setup.exeを実行
    • Install from Internetを選択
    • Root DirectoryはC:\cygwinで進める
    • Install ForはAll Users (デフォルトのまま)
    • Default Text File TypeはUnix / binary (デフォルトのまま)
    • Local Package Directoryは適当なところ
    • 接続はDirect Connectionで行けると思う
    • Download Siteはなんとなく資料に沿って
      http://mirrors.kernel.org
      を選択する
    • Select Packagesの画面になったらDevelを開く
    • autoconf, binutils, bison, flex, gcc-code, gcc-g++, makeを選択する
      *1
    • Develを閉じてNetを開く
    • opensshとopensslを選択する
    • Nextを押してインストールを待つ
  3. cygwin起動してみる

    • C:\cygwin\Cygwin.batを実行しhomeディレクトリをつくっておく

      • C:\cygwin\home\makoto_kw


iPhone 2.0 Toolchainに必要なファイルをかき集める

共通のtoolchainを取得・展開し、firmwareに含まれるソースを抜き出して追加するという作業。

  1. iPhone 2.0 Toolchainを入れる


    • http://www.pjtrix.com/iphone/articles/eclipse-cdt/iphone-2.0-toolchain.tgz

      を落とす
    • C:\cygwin\home\makoto_kw\iphone-2.0-toolchain.tgzに置く
    • 資料では好きな解凍ツールで解凍してね。と書いてあったが探すのが面倒なのでcygwin上で下記を実行し展開する(ブラウザによっては拡張氏がgzになることもあるのでファイル名の指定に注意)

      • cd ~tar xzvf iphone-2.0-toolchain.tgz
  2. iPhone 2.0のfirmwareからファイルを抜き出す

    • iPhoneのfirmwareからシステムファイルを抜き出すという悪い手順。firmwareは使っているマシンのローカルにあったり
      *2
      、ネットにあったりする
      *3
    • とりあえず今使っているiPod touch 1Gの2.1のfirmwareを使う(iPod1,1_2.1_5F137_Restore.ipsw)
    • firmwareの拡張子のipswをzipに変更し解凍する。中にいくつか.dmgファイルが出てくるが対象は一番ファイルサイズが大きいのが対象のはず
    • dmgは暗号化されているのでiphone-2.0-toolchainの中にあるvfdecrypt.exeを使って暗号化を解く
      *4
      。これには暗号化キーが必要だが、firmwareごとにキーが異なるので注意
      *5

      chmod u+x ~/iphone-2.0-toolchain/src/vfdecrypt.exe
      ~/iphone-2.0-toolchain/src/vfdecrypt.exe -i ~/018-4116-2.dmg -o ~/decrypted.dmg -k \
      9714f2cb955afa550d6287a1c7dd7bd0efb3c26cf74b948de7c43cf934913df69fc5a05f
  3. dmgファイルの中を抜き出すツールとしてPowerISOを使う
    *6

    • PowerISOを起動しdecrypted.dmgを開く、3つのディレクトリをiphone-2.0-toolchainへコピーする
    • decrypted.dmg/usr/lib
    • を下記にD&D

      • C:\cygwin\home\makoto_kw\iphone-2.0-toolchain\iphone-fs\usr
    • decrypted.dmg/System/Library/Frameworks
    • decrypted.dmg/System/Library/PrivateFrameworks
    • を下記にD&D

      • C:\cygwin\home\makoto_kw\iphone-2.0-toolchain\iphone-fs\System\Library


iPhone 2.0 Toolchainのコンパイル

一番トラブルが起こりそうなところ

  1. make-toolchainを編集

    • cygwin上でもwindows上(改行コードはLFのみにすること)でも良いのでC:\cygwin\home\makoto_kw\iphone-2.0-toolchain\make-toolchainをテキストエディタで開く
    • SUDO変数を設定しているところをコメントアウトする(19~24行目あたり)
      *7

      #case "${OSTYPE}" in
      #*win32*)
      #*cygwin*)
      #  export SUDO='echo "";'
      #  ;;
      #esac
    • $SUDOを削除する(6カ所)
      *8
      )
    • symlinkを追加する
      *9

      ln -sf libstdc++.6.0.4.dylib libstdc++.dylib

      の下に以下を追加(45行目あたり)

      ln -sf ../../System/Library/Frameworks/IOKit.framework/Versions/A/IOKit libIOKit.A.dylib
      ln -sf libIOKit.A.dylib libIOKit.dylib
      ln -sf libSystem.B.dylib libSystem.dylib
      ln -sf ../../System/Library/PrivateFrameworks/Accelerate.framework/Frameworks/vecLib.framework/libBLAS.dylib libblas.dylib
      ln -sf libbz2.1.0.4.dylib libbz2.1.0.dylib
      ln -sf libbz2.1.0.4.dylib libbz2.dylib
      ln -sf libSystem.dylib libc.dylib
      ln -sf ../../System/Library/PrivateFrameworks/Accelerate.framework/Frameworks/vecLib.framework/libBLAS.dylib libcblas.dylib
      ln -sf libcharset.1.dylib libcharset.1.0.0.dylib
      ln -sf libcharset.1.dylib libcharset.dylib
      ln -sf ../../System/Library/PrivateFrameworks/Accelerate.framework/Frameworks/vecLib.framework/libLAPACK.dylib libclapack.dylib
      ln -sf libncurses.5.dylib libcurses.dylib
      ln -sf libSystem.dylib libdbm.dylib
      ln -sf libSystem.dylib libdl.dylib
      ln -sf libedit.2.dylib libedit.2.9.dylib
      ln -sf libedit.2.dylib libedit.dylib
      ln -sf libexslt.0.dylib libexslt.dylib
      ln -sf libform.5.4.dylib libform.dylib
      ln -sf libiconv.2.dylib libiconv.2.4.0.dylib
      ln -sf libiconv.2.4.0.dylib libiconv.dylib
      ln -sf libicucore.A.dylib libicucore.dylib
      ln -sf libSystem.dylib libinfo.dylib
      ln -sf libipsec.A.dylib libipsec.dylib
      ln -sf ../../System/Library/PrivateFrameworks/Accelerate.framework/Frameworks/vecLib.framework/libLAPACK.dylib liblapack.dylib
      ln -sf libSystem.dylib libm.dylib
      ln -sf libncurses.5.dylib libncurses.dylib
      ln -sf libobjc.A.dylib libobjc.dylib
      ln -sf libSystem.dylib libpoll.dylib
      ln -sf libSystem.dylib libproc.dylib
      ln -sf libSystem.dylib libpthread.dylib
      ln -sf libresolv.9.dylib libresolv.dylib
      ln -sf libSystem.dylib librpcsvc.dylib
      ln -sf libsqlite3.0.dylib libsqlite3.0.8.6.dylib
      ln -sf libsqlite3.0.dylib libsqlite3.dylib
      ln -sf libstdc++.6.0.4.dylib libstdc++.6.dylib
      ln -sf libtidy.A.dylib libtidy.dylib
      ln -sf libutil1.0.dylib libutil.dylib
      ln -sf libxml2.2.dylib libxml2.dylib
      ln -sf libxslt.1.dylib libxslt.dylib
      ln -sf libz.1.2.3.dylib libz.1.dylib
      ln -sf libz.1.2.3.dylib libz.dylib
      ln -sf libz.1.dylib libz.1.1.3.dylib
  2. make-toolchainを実行

    • cd ~/iphone-2.0-toolchain
      ./make-toolchain
    • 神の書では2時間くらいかかるかもと書いてあり自分の環境では1時間くらいかかった


Hello World!

  1. 神の書を便りにhelloworldのコードを作成する

    • とりあえずまとめました、
      これ(sourcecode)
      をC:\cygwin\home\makoto_kwにおいてください。

      *10

  2. cygwinでmakeる

    • cd ~/helloworld
      make clean
      make
  3. iPhone/iPod touchに転送する

    • cygwinで下記を実行
    • iPHONE_IPはiPhoneのIPに置き換える。パスワードを聞かれたらalpineと打つ。

      ldid
      は署名をつけるツールでiPhone 2.0 Toolchainでインストールされる。署名しないとiPhone 2.0上ではアプリは起動しない。

      export IPHONE_IP=192.168.0.1
      cd ~/helloworld
      scp -r HelloWorld.app root@${IPHONE_IP}:/Applications/
      ssh root@${IPHONE_IP}
      ldid -S /Applications/HelloWorld.app/HelloWorld
  4. HelloWorldを実行する

    • アプリをコピーしてもiPhoneを再起動しないと表示されなったりする
    • BossPrefsなら、Power->Fast ReSpringでSpringBoardを再起動できる

    • helloworldを実行



      天才すぎる!(自画自賛時につかうおたけび)

つかれたのでeclipse + CDTのセットアップはまた今度にします。すごく手順を変更している気がするんだけど神はMacOSXでやってないか?(dmgの抜き出しのキャプチャとかどうみてもMac)最後にVMWareで実行しただけなんじゃないか疑惑。



*1
神の書ではmakeが入ってなかったけどtoolchainのコンパイルで必要だったので追加

*2

iTunesでfirmwareを更新している場合、Windowsなら場合%APPDATA%\Apple Computer\iTunes\、Tigerなら~/Library/iTunes/iPod Software Updatesになる

*3

http://www.felixbruns.de/iPod/firmware/
とか

*4

神の書ではvfdecryptをコンパイルする手順だったがうまくコンパイルできなかった。vfdecrypt.exeがあったのでそのまま使った

*5

各firmwareのDMG暗号化キーはここにまとまっている
http://theiphonewiki.com/wiki/index.php?title=VFDecrypt_Keys

*6

神の書ではツールとしてPowerISOがTransmacが記載されており、Transmacは15日試用期間、PowerISOは未登録だとファイル作成ができない、300MB以上のファイルは編集できないという制限がある。decrypted.dmgが300MB以下だったのでPowerISOを選択
http://www.poweriso.com/download.htm

*7
winodwsであればsudoを実行しないようにするという分岐処理なのだが以下のようなエラーになったので

./make-toolchain: line 21: syntax error near unexpected token `)'
./make-toolchain: line 21: `*cygwin*)'

*8

なんかexport SUDO=’echo "";’のこしても$SUDO …を実行したときにそのコマンド1行全体がechoになっているように見えたので・・・不安要素はなくす

*9

どう考えてもdmgからWindowsのファイルシステムにコピーした瞬間にsymlink消えています。ありがとうございました。symlinkしてないとHelloWorldAppのコンパイルで以下のエラーがでる

/usr/local/bin/arm-apple-darwin9-ld: /usr/local/iphone-sysroot/usr/lib/libobjc.dylib truncated or malformed object (mach header extends past the end of the file)
/usr/local/bin/arm-apple-darwin9-ld: /usr/local/iphone-sysroot/usr/lib/libz.1.dylib truncated or malformed object (mach header extends past the end of the file)
/usr/local/bin/arm-apple-darwin9-ld: /usr/local/iphone-sysroot/usr/lib/libstdc++.6.dylib truncated or malformed object (mach header extends past the end of thefile)

*10

神の書ではHelloWorldApp.hがなかったので作成、画像がないとmakeで怒られるのでSDKのサンプルからpng画像を拝借

iPhone OS 2.2.1->2.1にダウングレードしてからのJailbreak

そろそろ頃合いかなーと思ってiPod touchのFirmwareを2.2.1にあげてPwnageでJailbreakしたが、iPodで再生中の曲を直接Last.fmにscrobbleするscrobbledが動かない!
backgroundアプリに影響のある変更があったのかはよくわからないが、last.fmのforumみてもみんな動かないと言っているのでだめっぽい。というわけでダウングレードしてjailbreakしなおした。

ちなみにMacOSX(Tiger)だとiPodのfirmwareは~/Library/iTunes/iPod Software Updatesに保存されている。古いfirmwareも削除されず残ってあるようだ。おかげで簡単にダウングレードできた。

あまり新しいAppを探索していないのでありきたりになってしまうが必ずインストールするアプリは以下のようなものたち。

  • New Vi
  • OpenSSH
  • MobileTerminal
  • BossPrefs
  • WinterBoard
  • NemusSync
  • MobileFinder
  • Scrobbled
  • NES

これがないと仕事(?)ができない人みたいになってしまうのが、New Vi(エディタ), OpenSSH(リモートログインするための), BossPrefs(SSHなど拡張サービスのON/OFFとか), NemusSync(Googleカレンダーとスケジュールを同期)あたり。

これがないとiPod touch使う意味がないぜっていうのが先のScrobbled。

んで、優越感に浸るために入れるやつがMobileTerminal(Linuxコマンド打てるんだぜ?って見せびらかすよう。実際にはsshでリモートで操作するほうが楽)、MobileFinder(MacOS入ってるんだぜ?って見せびらかすよう。実際にはそんなにファイル探すことはない)、NES(ファミコンできるんだぜって見せびらかすよう。実際にはそんなゲームしない。でもこれでロックマン2クリアできるかチャレンジしたい)、WinterBoard(カスタマイズしてるんだぜって見せびらかすよう。実際には全然テーマとか入れてない)あたりかな。

iPod touch 2.1 + Jailbreak

iPod touchのソフトウェアを2.1に更新した。geniusが使えるようになった。

jailbreakする度に初期化している。AppStore経由で入れたアプリはバックアップ・リストアされるんだけど、Cydiaで入れたものは対象外で面倒になってきたのでもう下記くらいしかアプリ入れてない。

  • OpenSSL
  • BossPrefs
  • Mobile Terminal
  • NES
  • NemusSync

必要になったときに入れれば良いか。