Hatena::Groupiphone-dev

laiso

URLが変わりました (2013/03/08)

|

2012-07-31

全霊長類待望の「iOS SDK5/Xcode4環境でiPhoneシミュレータをiOS4.2 iOS4.1 iOS4.0 でデバッグする方法」がわかった

19:28 | はてなブックマーク -  全霊長類待望の「iOS SDK5/Xcode4環境でiPhoneシミュレータをiOS4.2 iOS4.1 iOS4.0 でデバッグする方法」がわかった - laiso

結構時間がかかったので次の人が辿りつけるよう書いておく。

問題

デフォルトの状態ではiPhone 5.1 シミュレーターしか使えない

http://gyazo.com/e632931867fbe2794dc5de3884d293da.png

"More Simulators" からダウンロードメニューにいっても、5.0 4.3のシミュレータしかインストールできない。

iOS3.0〜, iOS4.0〜のデバッグサポートコンポーネントがあるけどシミュレータではなかった(たぶん古いバージョンのままの実機を繋いでデバッグできるという内容)。


Xcode3系のインストール

Xcode 3.2.6 をインストールします

https://developer.apple.com/downloads/index.action?name=for%20Xcode%20- (ADCログイン)


http://gyazo.com/5c3e09fb63f48a044eb7a1b9f604fb44.png

今回はXcode.app まで要らないのでLion以降でもそのままインストールするだけ(Xcode.appはコマンドラインから環境変数セットしないと入らないらしい)。


iPhoneSimulator4.x.sdk ディレクトリをポートする

iPhoneSimulator.appはしかるべき場所にしかるべき構造の.sdkツリーがあれば自動で認識するという仕組みらしい、可搬性に優れた素晴しいアプリケーションの動作設計である(最初から配布しろ)。

単純にファイルコピーします。

sudo rsync -av  /Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/  /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/

ここでXcodeを再起動する。

仕上げ

http://gyazo.com/1dbc140bbb17b948e370b118bb367fbd.png

Deployment Target を 4.0 にしておく。

http://gyazo.com/52915c562bc1d920ed99a81108e47001.png

実行メニューにiPhone 4.0 シミュレーターなどが表示される

http://gyazo.com/cb7049656a7449b8f5c6862aa06bfaaf.png

シミュレータ側からも切り替えられる


参考

実機のiOSをiOS4.2 iOS4.1 iOS4.0にダウングレードしてデバッグする方法は?

Jailbreak周辺の知識なんんだけど、それぞれの端末のカスタムのSHSHファイルを各iOSバージョン時点で保存しておく方法しか見当らなかった。

自分はSHSHを保存していないし、正規のデベロッパーでかつ悪用したいわけでないのになんで非公式の方法しかないんだ…… とむなしくなり実機デバッグは諦めた。

トラックバック - http://iphone-dev.g.hatena.ne.jp/laiso/20120731

2012-07-15

UIWebViewでスクレイピングするライブラリの試作版を作った

20:02 | はてなブックマーク -  UIWebViewでスクレイピングするライブラリの試作版を作った - laiso

これ。

サンプルアプリでPinterestのpopular(http://m.pinterest.com/popular/)の写真を閲覧するやつを入れた。

想定する使い方はこんな感じ。取得したい要素のXPathを指定する。

Example/RootViewController.m#L34

  // UIViewController を継承したクラス
  [self.webScraper scrape:@"http://m.pinterest.com/popular/" 
                 selector:@"//div[@id=\"wrapper\"]//div[@class=\"image\"]//a/img"
                  handler:^(NSArray *elements, NSError *error) {
                    NSLog(@"Load %d elements.", elements.count);
                    
                    for (NSDictionary* img in elements) {
                      NSString* url = [[img objectForKey:@"attributes"] objectForKey:@"src"];
                      [self.imageURLs addObject:url]; // NSMutableArray* imageURLs;
                    }
                  }];

UIViewControllerのカテゴリとして、プロパティ経由で呼び出して使う(なんか気持ち悪いが今のところこの方法しかうまくいってない)。ほんとはviewに依存しないHeadlessな感じにしたいけど、できてない。

仕組み的には1x0のサイズのUIWebViewインスタンスを呼び出し元のUIViewControllerのviewに追加して内部でリクエストを処理してる(昭和のモジュールっぽい)。

ページ読み込みが完了したらJavaScriptでdocument.head, document.body のinnertHTMLをhppleっていうパーサーで解析して結果を返している。

CSSセレクタとかサポートできそうだし、JavaScriptベースで要素選択まですればいいじゃんと最初は思ってけど重くなりそうな予感や、デバッグ地獄そうなので回避した。あと途中までUser-Agentの切り替えもサポートしてたんだけどこれもうまくいかなくなって一旦パスした。

構想としてはこんな感じ

・単純なHTMLリソースのスクレイピングはHTTPクライアントでできるので専門外

・またはサーバーサイドのバッチ処理でスクレイピングして全ユーザー共通にキャッシュ効いているやつをWeb API経由で配信するとかが通常とられている

・なのでクライアントサイドでJavaScriptを評価した後のHTMLから情報を取得したいケースに使う

・ex:Google検索の結果をUITableViewに表示とか……

・ex:ユーザーログイン後のマイページ内の情報……とか

・開発者向け公開Web APIがないサイトとか(外部サイトの使用変更につられるので、動作保証はあんまりできなげな方法)

・PhantomJSみたいな役割にしたい

・自動テストの補助とか

PerlのWeb::Scraperを想起される名前になっているけど、最初思いついた段階でそれっぽい路線で作っていたけど、どんどん関係なくなりそうなので名前は変えるかもしれない。

トラックバック - http://iphone-dev.g.hatena.ne.jp/laiso/20120715

2012-06-25

Safariのウェブサイト上からJavaScriptで「アプリがインストールされてなかったらApp Storeへ誘導する」を実現する

18:15 | はてなブックマーク -  Safariのウェブサイト上からJavaScriptで「アプリがインストールされてなかったらApp Storeへ誘導する」を実現する - laiso

これできないしょーとずっと思ってたんだけどstackoverflow.com で無理矢理実現している頭のやわかい人がいたので紹介する。

ようは「特定のアプリをインストールしているかどうか」をSafariからチェックするのではなく「特定のアプリを起動するURLが開けていないことを画面遷移状態で監視し、インストールされていないと推測する」というアプローチみたい。

こんな感じ。

<html lang="ja">
<meta charset="UTF-8">
<body>

    <a href="#" onclick="launchApp('myapp:?c=mypage')">アプリを起動する</a>

<script>

    function launchApp(url) {
        document.location = url;
        var time = (new Date()).getTime();
        setTimeout(function(){
            var now = (new Date()).getTime();

            if((now-time)<400) {
                if(confirm("アプリがインストールされていません。今ダウンロードしますか?")){
                    document.location = 'http://itunes.apple.com/WebObjects/MZStore.woa/wa/viewSoftware?id=293049283&mt=8&uo=6';
                }
            }
        }, 300);
    };

</script>
</body>
</html>

`myapp:`〜 のところを`mailto:`〜 `sms:`〜とかにすると動作の違いが確認できるはず。

setTimeoutに渡す関数内で400msチェックしているのは、カスタムURLが開けて→元の画面に戻ってきた時にポップアップを抑制する為の処理になっている。


Mon Jun 25 19:03:10 JST 2012

よく考えたらアプリを起動する段階にならないと上のやつは使えないので、ランディングページにアクセスした時点でユーザーのインストール状態によって内容を変える(既存ユーザーには期間イベント情報出すとか)、とかの要件だと無理か。

なので「Safariからアプリを起動できない時にダウンロード用のポップアップを出す」が正確な見出しだった。しまった。

一旦アプリを起動してSafariに戻ってくるようキックバックするっていうのも考えられるけど、ユーザー目線だとなぞの挙動でしかないなあ。


iOS6 Safariでは同等の機能があるらしい

(まだ未確認っす)


iframe版

アプリがインストールされてなかったらApp Storeへ誘導する - jsdo.it - Share JavaScript, HTML5 and CSS

http://jsdo.it/kyo_ago/4DMg



続報

0-9, iOS, AndroidでSafariからアプリのインストール状態によって遷移先を変える方法

トラックバック - http://iphone-dev.g.hatena.ne.jp/laiso/20120625

2012-06-23

ローカルにiOS Developer Library のサーバを立ててウェブブラウザ向け翻訳ツールで読む

21:22 | はてなブックマーク -  ローカルにiOS Developer Library のサーバを立ててウェブブラウザ向け翻訳ツールで読む - laiso

英語をすらすら読めれば専用ビュワーのMacアプリケーションがいくつかあるのでそれを使えばいいんだろうけど、自分は辞書索きながらじゃないと読めないので、

トピックで読む時はXcodeのドキュメントビュワーから`Command+Control+D` でDictionary.app で単語を調べながら読んで、

プロパティ、メソッドレベルの確認とかは`Alt+左クリック` でポップアップで開いていたり、`Command+Shift+O` でSDK のヘッダファイル直接見てたり、

ポイントで知りたいことがある時は`site:developer.apple.com KEYWORD` でGoogle検索してMultiLookup (Chrome Web Store)で文で翻訳しながら読む

というなんかめんどくさいやり方が常なのだけども。

このオンラインで見てたiOS Developer Library、Xcode環境でダウンロードしていたらローカルにHTML+JavaScript形式でフルセットあることに気付いた。

※ ローカルの辞書セットだと単語でしか索けない

のでこれをブラウザから見ればいいことに気付いた。

cd ~/Library/Developer/Shared/Documentation/DocSets/com.apple.adc.documentation.AppleiOS5_1.iOSLibrary.docset/Contents/Resources/Documents
open http://localhost:9000/ && /usr/bin/python -mSimpleHTTPServer 9000 

# `Control-C` で終了

※ トップのナビゲーションもJavaScript ベースなので動く。

※ サイト内検索はうまく動かないので、オンラインのiOS Developer Library に頼るか、grep するかしないといけないんだけど……


なるほど「ところでこれはそんな便利なTIPSなのかな〜?」とみなさんは思うかもしれないでしょうが、なんか俺もそんな気になってきた……

トラックバック - http://iphone-dev.g.hatena.ne.jp/laiso/20120623

2012-05-24

「iOS SDKプログラミング・iPhoneアプリ開発入門の記事まとめリンク集」を参考にする前にアップルの翻訳済み公式ドキュメントを読もう

02:41 | はてなブックマーク -  「iOS SDKプログラミング・iPhoneアプリ開発入門の記事まとめリンク集」を参考にする前にアップルの翻訳済み公式ドキュメントを読もう - laiso

はじめに

よく「iPhoneアプリ開発学習用のリンク集」みたいなまとめ記事がありますが古いブログ記事がピックアップされていることも多く、

そもそもiPhoneアプリ開発は、OS・SDKの進歩が数ヶ月単位でどんどん更新されていくぐらいはやいので、数年前の入門記事を全くの初心者が参考にしてもつまづきやすいように感じています。

アップル公式ドキュメントはブログ記事などと違ってOS、SDKの更新には追従して更新され続けます。まあ即翻訳されるわけじゃないけどそれでも正確な情報が得られる可能性は他より高いです。

なのでアップルの翻訳済み公式ドキュメントを読みましょう。

と言ってもたくさんあってどれから読んだらいいのかわからないと思うので、いくつかピックアップして紹介します。

サンプルコード

その前に、

実はドキュメントよりサンプルコードを実際に触ってみることの方が学習効率が高いことが開発者達の中でもよく知られています。Topic など参考に自分の興味のありそうなキーワードのあるアプリケーションのソースコードをどんどんダウンロードしてゆきましょう。全体的なUIKitを利用した基盤の構成はほぼどれも一緒なのでどれでも勉強になるはずです。また、Date でソートして新しめのものから見ていくと良いです。

入門

iOSアプリケーションプログラミングガイド
https://developer.apple.com/jp/devcenter/ios/library/documentation/iPhoneAppProgrammingGuide.pdf
iOSテクノロジーの概要
https://developer.apple.com/jp/devcenter/ios/library/documentation/iPhoneOSTechOverview.pdf

入門者用に用意された、最初に読むべきドキュメントです。わからない所はトピックごと飛し、興味あるところだけ読んでいけばいいと思います。

チュートリアル

初めての iOSアプリケーション
https://developer.apple.com/jp/devcenter/ios/library/documentation/iPhone101.pdf
2つ目のiOSアプリケーション:ストーリーボード
https://developer.apple.com/jp/devcenter/ios/library/documentation/SecondiOSAppTutorial.pdf
3つ目のiOSアプリケーション:iCloud
https://developer.apple.com/jp/devcenter/ios/library/documentation/iCloud101.pdf

チュートリアル形式のドキュメントです。開発しながら学習できるのでより実践的です。

Objective-C

Objective-Cによるプログラミング
https://developer.apple.com/jp/devcenter/ios/library/documentation/ProgrammingWithObjectiveC.pdf
Objective-Cプログラミング言語
https://developer.apple.com/jp/devcenter/ios/library/documentation/ObjC.pdf
Objective-Cプログラミングの概念
https://developer.apple.com/jp/devcenter/ios/library/documentation/CocoaEncyclopedia.pdf

iOSアプリケーション開発に使うプログラミング言語Objective-C自体をとりあげているドキュメントです。既にRubyやPHPなど他のプログラミング言語のユーザーであるなら上記も興味深いでしょう。iPhoneアプリ開発がプログラミングとしてははじめて、という人は今とくに読んでおく必要はありません。

UIKit

iOS View Controllerプログラミングガイド
https://developer.apple.com/jp/devcenter/ios/library/documentation/ViewControllerPGforiOS.pdf
iOS Table Viewプログラミングガイド
https://developer.apple.com/jp/devcenter/ios/library/documentation/TableView_iPhone.pdf

iOS SDK でアプリケーションを作成する際に利用することになるUIKit フレームワークについてのトピックです。とりわけ、View Controller・Table Viewは頻繁に使う可能性が高い重要なトピックなので優先するといいでしょう。


FAQ

Q. もっとそれ以前の、開発環境の構成とか開発者登録の方法とか日本語の公式ドキュメントってないの?
A. iOSプログラミングの基礎 - ドットインストール などはどうでしょうか。ビデオチュートリアルでなかなか評判が良いです。
Q. そもそもまとめ記事ってクリップ欲を満すことが目的なので言う程参考にされてないよ
A. マジかよ……
トラックバック - http://iphone-dev.g.hatena.ne.jp/laiso/20120524
|