Jail Breakの状況や問題点とその対策のまとめ。改造や広告削除など。Androidアプリの不正使用についても触れられていて参考になった。
Audio Unit サンプル紹介
Published on 2013年2月21日木曜日 Leave your thoughts »
|
|
Tweet |
Audio Unitを活用したサンプルの紹介。2チャンネルミキサーや各種エフェクト、サンプラーなど。
個人的には Audio Unit の「ユニットをつなげて複雑なオーディオ処理を実現する」というしくみ(AUGraph)がまるでギターのエフェクターをつないで音をつくる感じに似ていて、そのあたりも興味深いポイントとなっています。
This post is archived under Audio Unit, 情報
iOSはRemoteViewControllerで進化を遂げるか
Published on 2013年2月7日木曜日 2 appreciated comments »
|
|
Tweet |
Ole Begemann さんのブログで3回に渡り "Remote View Controller" に関するハックが解説されている。
Part1:
Part2:
More on Remote View Controllers – Ole Begemann
Part3:
Update on Remote View Controllers – Ole Begemann
乱暴に要点をまとめると
・iOS6でXPCが導入された
・XPCをベースにした Remote View Controller な仕組みが非公開APIで提供されている
・アプリから iOSが提供するサービス(例えばメッセージ、Facebookなど)を呼び出す時に使われている
XPCとは OS X Lion から導入された "lightweight helper tools"。launchd管理下にあって、アプリからのリクエストに応じてプロセス(Sandbox)を起こし各種サービスを提供する仕組みのこと。
(参考)
XPC Services を使う用途として次の2点が挙げられている。
安定性の向上 〜 XPC Services が落ちてもアプリには影響を与えない。
セキュリティの向上 〜 XPC Services毎にアクセス制御を細かく設定できて、アクセス可能な範囲を本体のアプリとは分離できる。Sandboxでの利用が想定されている。
OS X ではセキュリティの向上を主に目的に導入されたと思われるが、iOS6ではこれを外部プロセス(サービス)利用時のプロセス間通信の仕組みとして利用しているようだ。
そしてこのXPCを利用した RemoteViewController は、その名の通りリモート版ViewControllerの役割を果たす(※ここでいうリモートとはアプリプロセスの外部のプロセスを指す。ネットワーク越しの外部のことではない)。具体的には、サービスが提供するViewController(例えばFacebookならメッセージ編集ダイアログのViewController)のプロキシとして働く。どうも RemoteViewControllerとそのビューは、アプリ側のViewController階層、ビュー階層に透過的に組み込まれるようだ。ViewControllerとして振舞うということはアプリ側は今までのViewControllerの作法で使えるし、サービスを提供するリモート側もアプリとのインターフェイスに使い慣れたViewControllerが利用できるということだと思われる。
*イメージ*
+−−−−−−−−−−−−−−−−−−−−−+ |アプリのViewController| | ↓ | |RemoteViewController| |(プロキシ) | +−−−−−−−−−−−−−−−−−−−−−+ ↓ XPC ↓ +−−−−−−−−−−−−−−−−−−−−−+ | サービスプロセスの | | ViewController | +−−−−−−−−−−−−−−−−−−−−−+まだはっきりとわからないがイメージとしてはリモートのViewControllerを透過的扱えるということらしい。ということは描画もユーザのインタラクションもXPCを通じて透過的に外部プロセスとやりとりできるのかもしれない。そうだとしたら凄い。
検証記事によれば、この仕組は iOS5には無かったもので実際メッセージ作成のUIを呼び出したときの挙動が明らかに変わっていることが指摘されている。例えばMFMailComposeViewControllerを呼び出した時のビュー階層はiOS6の場合:
(lldb) po [controller.view recursiveDescription] (id) $2 = 0x1e05c2e0 'MFMailComposeViewController:0x1e04f6d0' 1 child[MFMailComposeInternalViewController:0x1e02dfd0 ] <UILayoutContainerView: 0x1e04ffe0; frame = (0 0; 320 480); autoresize = W+H; layer = <CALayer: 0x1e0500a0>> | <UINavigationTransitionView: 0x1d57f6a0; frame = (0 0; 320 480); clipsToBounds = YES; autoresize = W+H; layer = <CALayer: 0x1d57f770>> | | <UIViewControllerWrapperView: 0x1e04f600; frame = (0 20; 320 460); autoresize = W+H; layer = <CALayer: 0x1e0241f0>> | | | 'MFMailComposeInternalViewController:0x1e02dfd0' 1 child[MFMailComposeRemoteViewController:0x1e055230 ] <UIView: 0x1e05f9a0; frame = (0 0; 320 460); autoresize = W+H; layer = <CALayer: 0x1e05fa00>> | | | | 'MFMailComposeRemoteViewController:0x1e055230' <_UISizeTrackingView: 0x1e05c030; frame = (0 0; 320 460); clipsToBounds = YES; autoresize = W+H; layer = <CALayer: 0x1e05c110>> | | | | | <_UIRemoteView: 0x1e05c300; frame = (0 0; 320 480); transform = [0.5, -0, 0, 0.5, -0, 0]; userInteractionEnabled = NO; layer = <CALayerHost: 0x1e05c460>>最下層に *RemoteViewController と _UIRemoteView が組み込まれているのがわかる。
次はiOS5の場合
(lldb) po controller (MFMailComposeViewController *) $1 = 0x07ea0420 <MFMailComposeViewController: 0x7ea0420> (lldb) po [controller.view recursiveDescription] (id) $2 = 0x08bb4d50 'MFMailComposeViewController:0x7ea0420' 1 child[MFMailComposeController:0x89b0220 ] <UILayoutContainerView: 0x8b97e70; frame = (0 0; 320 480); autoresize = W+H; layer = <CALayer: 0x8b97ec0>> | <UINavigationTransitionView: 0x89b1460; frame = (0 0; 320 480); clipsToBounds = YES; autoresize = W+H; layer = <CALayer: 0x89b1500>> | | <UIViewControllerWrapperView: 0x7e77990; frame = (0 64; 320 416); autoresize = W+H; layer = <CALayer: 0x7e98af0>> | | | 'MFMailComposeController:0x89b0220' <MFMailComposeView: 0x89b4410; baseClass = UITransitionView; frame = (0 0; 320 416); clipsToBounds = YES; autoresize = W+H; layer = <CALayer: 0x89b4530>> :と、かなり長いので割愛するが、iOS5の場合は通常のローカルなUIViewControllerのサブクラス、そしてUILabelやUIButtonがビュー階層に配置されている。そう、iOS6の方では画面上に配置されているUILabelやUIButtonがビュー階層に現れない(!)。
検証記事では色々な方法を駆使して最終的にはRemoteViewControllerとXPCの接点になると思われるメソッドを突き止める。
+ (id)requestViewController:(id)arg1
fromServiceWithBundleIdentifier:(id)arg2 connectionHandler:(id)arg3;こんな感じで使われる。[MFMailComposeRemoteViewController
requestViewController:@"ComposeServiceRemoteViewController"
fromServiceWithBundleIdentifier:@"com.apple.MailCompositionService"
connectionHandler:handler];第一引数がRemoteViewControllerのクラス名、第二引数がサービスのバンドルID。この例の場合、/Applications/MailCompositionService.appに対応するようだ。そして第三引数は2つの引数を取るブロック。こんな感じ。
typedef void (^ConnectionHandler)(id blockArg1, id blockArg2);blockArg1にはリモートと接続されたRemoteViewControllerのインスタンス、blockArg2はNSError*と推察されている。ここでこのブロックを意図的に置き換え(swizzledBlock)、さらにRemoteViewControllerになりすますプロキシ(loggerProxy)を用意して、RemoteViewControllerにどんなメッセージが送られているかを調べている。結果はこう:
Logger Proxy: [<MFMailComposeRemoteViewController: 0x1c576600> serviceViewControllerProxy]
return value: @: <_UIViewServiceImplicitAnimationEncodingProxy: 0x1d83e4a0; target: <_XPCProxyReplyHandlerQueueRedirectingProxy: 0x1d8701d0; target: <_UIViewServiceXPCProxy: 0x1d8613c0>>>
Logger Proxy: [<MFMailComposeRemoteViewController: 0x1c576600> setDelegate:]
called with arguments: (
"@: <MFMailComposeInternalViewController: 0x1c56f9c0>"
)
return value: v: (void)
Logger Proxy: [<MFMailComposeRemoteViewController: 0x1c576600> parentViewController]
return value: @: (null)
Logger Proxy: [<MFMailComposeRemoteViewController: 0x1c576600> view]
return value: @: XX ('MFMailComposeRemoteViewController:0x1c576600' <_UISizeTrackingView: 0x1d855440; frame = (0 0; 0 0); clipsToBounds = YES; autoresize = W+H; layer = <CALayer: 0x1d865e90>>)
Logger Proxy: [<MFMailComposeRemoteViewController: 0x1c576600> parentViewController]
return value: @: (null)
Logger Proxy: [<MFMailComposeRemoteViewController: 0x1c576600> _existingView]
return value: @: 'MFMailComposeRemoteViewController:0x1c576600' <_UISizeTrackingView: 0x1d855440; frame = (0 0; 320 416); clipsToBounds = YES; autoresize = W+H; layer = <CALayer: 0x1d865e90>>
Logger Proxy: [<MFMailComposeRemoteViewController: 0x1c576600> _existingView]
return value: @: 'MFMailComposeRemoteViewController:0x1c576600' <_UISizeTrackingView: 0x1d855440; frame = (0 0; 320 416); clipsToBounds = YES; autoresize = W+H; layer = <CALayer: 0x1d865e90>>
:
setParentViewController: や willMoveToParentViewController: など通常のViewControllerの初期化で呼び出されるメッセージが送られている。リモートのViewControllerが、透過的にローカルViewControllerとして働くことが推察される。Part2では発見されたRemoteViewControllerが表でまとめられている。
More on Remote View Controllers – Ole Begemann
これをみると既にいくつものサービスがこの仕組で提供されているのがわかる。またPart3では_UIWebViewControllerも紹介されている。WebブラウザはSandbox化が望まれるコンポーネントなのでもし今後XPC経由で安全に扱えるようになればセキュリティ上大きなメリットになると思われる。
- - - -
Appleが一般開発者にXPCサービスの開発を開放することはこれまでの方針から考えにくいが、Appleが提供するXPCサービスが今後iOS7以降、さらに増えることは間違いない。それらは現状と同じように各種フレームワークのAPIとして提供されると思われる。ただそうだとしてもサービスが増えるメリット、XPCの特性を生かしたセキュアなコンポーネントが利用できるメリットなど地味ながらも大きな改善になるだろう。そして将来もしXPCサービスの開発を一般開発者へ開放することがあれば、iOSは今とはかなり違った体験を提供できるスマートフォンになるかも。これはちょっとワクワクする。
なお今回は(というか毎回ですが)勢いで書いたので間違い・勘違いがあれば遠慮無く指摘して下さい。
This post is archived under 情報
「業務用iOSアプリ作成講座」
|
|
Tweet |
「IOSアプリ開発に役立つTips」
Published on 2013年2月6日水曜日 Leave your thoughts »
|
|
Tweet |
最新の機種別能力比較表
Published on 2013年2月2日土曜日 Leave your thoughts »
|
|
Tweet |
最新のiOS開発情報が入手できる便利サイト - iOS Dev Bot
Published on 2013年1月8日火曜日 Leave your thoughts »
|
|
Tweet |
これはいい
Qiita、はてぶ、Gist、Twitter、Stack Overflow から自動的に情報を集めてきているようだ。

Githubも加わるとうれしいかも(Most Starred Todayとか)。
- - - -
これは便利。使わせてもらいます。
This post is archived under 情報
iOS 6 予想
Published on 2012年6月8日金曜日 Leave your thoughts »
|
|
Tweet |
HMDT 木下さんの iOS6の「予想というか願望」。こういうのは楽しい。Siriの APIは期待したいな。「iCloudベースのオープンダイアログ」は同感。ただAppleに完全に囲い込まれることになりそうだが。
This post is archived under 情報
BaaS (Backend as a Service) のまとめ
Published on 2012年2月24日金曜日 Leave your thoughts »
|
|
Tweet |
いいまとめ。BaaSというキーワードはこの記事で初めて知った。
今後増えていくことは間違いない気がするけれど、利用する時に障壁になるのはセキュリティとサービスの持続性につきる(アプリにもよるけれど)。この辺りを考えると長期利用を見越したサービス/アプリでの利用になると、小さなベンチャーが提供しているようなサービスは実際問題として利用は二の足を踏んでしまう。ただスタートアップの時間短縮と割りきって、大きくなってきたら自社運用に切り替えるという活用方法もあるのかもしれない。
後はこういったサービスをホストするプラットフォームの必要性。EC2 や GAE がその基盤になっていくとしても、もう1段上のレイヤー(プラットフォーム)があると良さそう。ある程度大きなベンダーがBaaSの為のプラットフォームを提供し、そこでサードパーティが様々なサービスを提供する形態をとることで利用障壁はぐっと低くなる気がする。
- - - -
と、ここまで書いてきてふと思い出したが、Amazon は S3、SQS、RDS、Elastic MapReduce、SimpleDB、...等々提供していて通常のサーバでいうところのミドルウェアレイヤーは既にほとんどカバーできている。先日はワークフローエンジンも公開された。Amazonはここでいう BaaSの領域にじわじわと出てきている。将来は他サービス用に amazonのアカウント認証を公開することがあるかもしれない(もう既にされている?)。iOS/OSX限定だと iCloudがあるが、こっちは完全に Appleに囲いこまれたサービスなので、独自サービスでの利用は基本できない。iCloudが他サービスのプラットフォームとしてオープンになることは今後も無いだろうな。ユーザ認証に限って言えば Twitter/Facebookは既にそのスタンダードになりつつある印象を受ける。
This post is archived under 情報
通知は同期呼び出し、そしてKVOの方が効率的
Published on 2012年2月11日土曜日 Leave your thoughts »
|
|
Tweet |
通知はなんとなく非同期なイメージがあるけれど同期呼び出しとドキュメントに明記されている。なので監視元(オブザーバ)で重い処理を走らせたりするとブロックするし、監視元がたくさんある場合は実行速度に影響を与えることがある。記事では通知を効率的に使う上での情報が紹介されていて参考になった。
This post is archived under 情報
MainWindow.xib が消えた
Published on 2012年2月10日金曜日 Leave your thoughts »
|
|
Tweet |
Storyboard導入によって無くなった。また main() と application:didFinishLaunchingWithOptions: 内の記述が変わった事に触れている。
この記事に記載されているアプリ起動シーケンス図は参考になる(図はCCライセンス)。
以下引用。
This post is archived under 情報
URLスキームデータベース
Published on 2012年2月3日金曜日 Leave your thoughts »
|
|
Tweet |
iOSアプリのスキームを集めたDB。現在 600以上のアプリが登録済。スキーム名による検索の他、アカウントを作れば新規にスキームを追加することもできる。
以下、サイトからの転載
これはいい。さらに API を提供してくれたらアプリから問い合わせに使えて便利かも。
関連情報
Cocoaの日々: [Info] iPhoneで利用可能な URLスキームまとめサイトの紹介
インストールされているアプリを知る | Cocoaの日々情報局
URLスキーム名がバッティングした場合は上書きになる | Cocoaの日々情報局
This post is archived under 情報
OS 3.0 以降対応のアプリを開発するにはデバイスが 23台必要
Published on 2012年1月14日土曜日 Leave your thoughts »
|
|
Tweet |
アプリ開発者が知っとくべき 32個の情報リソース
Published on 2012年1月13日金曜日 Leave your thoughts »
|
|
Tweet |
情報サイト、チュートリアル、本、デザイン、ツールなどが紹介されている。知らないサイトも多く参考になった。
以下は配布されている Infographic
[Source: iPhone App Design]
This post is archived under 情報
Bluetooth Smart Device 情報
Published on 2012年1月12日木曜日 Leave your thoughts »
|
|
Tweet |
G-SHOCK
MOTOACTV
その他、健康機器などが取り上げられている。種類は少ないがスマートフォンで Bluetooth 4.0が採用されるのに伴い今後増えていくと思われる。
以下記事より抜粋:
- 2012年末にはほとんどのスマートフォンが Bluetooth 4.0 に対応
- Windows8 も Bluetooth 4.0 に対応する予定
Bluetooth Low Energy 対応の G-SHOCK 発表 | Cocoaの日々情報局
This post is archived under Core Bluetooth, 情報
そら案内のアクセス解析で iOS5 利用者は 68%
Published on 2012年1月5日木曜日 Leave your thoughts »
|
|
Tweet |
iPhone/iPad 画面レイアウトの実ピクセルがよくわかる図
|
|
Tweet |
これは便利。iPhone/iPad の画面レイアウトの実ピクセルサイズがわかりやすい図でまとめられている。例えばiPhone縦はこんな感じ。
This post is archived under 情報
デバイスの回転に関するまとめ
Published on 2011年12月28日水曜日 Leave your thoughts »
|
|
Tweet |
デバイス回転時の流れを図にした分かりやすい説明
|
|
Tweet |
良記事。
回転時の実行の流れがこんな感じでわかりやすく説明されている。
さらに後半では iPad で分割キーボードを使用していた場合の処理の流れについても言及あり。
This post is archived under 情報












