8/2(土) 64回Cocoa勉強会(関東)のお知らせ

次回の勉強会のお知らせです。見学の申し込みはconnpassのイベントページからお願いします。

2014-06-14 66回 Cocoa勉強会(関東)のレポート

会場はいつもの新宿伊藤ビルの貸し会議室
参加者は20人(うち見学6名)でした。

今回はハードウェアな話が多かったでしょうか。

発表「LightBlue Bean」gadget

LightBlue Beanデバイスについて。

  • Bluetooth Low Energy
  • さまざまなセンサー
  • Arduino互換

発売時にSDK公開のはずが、勉強会当日まで遅れた。。
価格は購入時26米ドルで、類似のkonasiが1万円近くすることを考えるとずいぶん安価。
(konasiは技適取得しているので、そのぶんの価格差では?との話も)

Arduino側の動作に電力を食っているようで、電池がすぐなくなってしまう。

発表「iOSアプリの署名」iOS

去年12月の63回での発表の続き。
未署名のコンパイル済みアプリを顧客に納品し、顧客側で署名してサブミットしたいよね。という話。

質疑応答の中で、Testflightはアーカイブされたアプリを署名しなおすことができてるので、アプリとパッケージを別々の署名で処理することができるのでは?という話も。

発表「OS Xの画面開発」Mac

MacのStoryboardの話。
iOSのようにViewControllerがresponder-chainに入るようになった!

発表「irMagician」gadget

前回4月の続き。
MacやPCと協調して利用する赤外線リモコンシステム、irMagicianについて。

類似製品であるIRKitとの比較や、受信機との組み合わせで
Macから別のMacにキーボード入力を赤外線で送るデモなどがありました。

発表「Swift」swift

WWDCで発表されたiOS/Macアプリ開発用の新言語、Swiftについて。

Playgroundで動かしながらつくった70ページ超(!)のスライドを見ながら
みんなであれこれ話しました。

次回の予定

8/2に開催予定です。

2014-04-05 65回 Cocoa勉強会(関東)のレポート

会場は、新宿伊藤ビルの貸し会議室。
参加者は、22人でした。

発表「NSURLSessionでのバックグランドダウンロード」Mac/iOS

背面実行したければBlocksでなく、デリゲートで。
デリゲートは通信できればその分だけ呼ばれるので、高速にダウンロードできる。高い頻度でデリゲートが呼ばれ状況で呼ばれる度にUIを更新する処理を行うと、それがボトルネックとなることがある。

Q. 背面実行時は、別のデーモンで処理されている?
A. 背面実行時にアプリが終了すると、通信もとまる。

Q. ストリーミング再生に使える?
A. 使えない。その場合はデータタスクを利用かな。

Q. 通信がエラーになった場合は?
A. NSErrorを渡すメソッドがあるので、それは呼ばれると思う。

発表「すれ違い通信 (Bluetooth LEとiBeacon)」iOS

CoreBluetoothを使ったすれ違い通信と、iBeaconを使ったすれ違い通信のサンプルコードを説明。

発表資料とサンプルコード

https://github.com/murakami/workbook/tree/master/ios/Wibree

発表「ガリレオをMacで動作させるまで」OSX

Galileo with Mac。Galileoはインテル製のボード。
CPUはx86系。OSはLinux。
初心者向けでなく、以前はケーブルも自作。

irMagician with Galileo and Macintosh
IR操作がUSB接続のシリアル通信でできる製品の紹介。 例えば、エアコンのリモコン操作への応用etc。

発表「はじめてのスプライトキット」iOS

関西で冬に発表した内容。
UIViewを継承しているので、Cocoa touchのUI部品と簡単にのせられる。
Sprite Kitは左下原点。シーンは左下原点だが、ノードは真ん中原点(アンカーポイント)。
アクションはByとToがあり、Byは相対的。Toは親座標の絶対値。

発表資料とサンプルコード
http://www.studioshin.com/cocoa_sample/

次回の予定

次回は6/14(土)に今日と同じ会場で開催予定です。

4/5(土) 65回Cocoa勉強会(関東)のお知らせ

次回の勉強会のお知らせです。見学の申し込みはconnpassのイベントページからお願いします。

2014-02-08 64回 Cocoa勉強会(関東)のレポート

大雪の中、ありがとうございました。

会場は新宿伊藤ビルの貸し会議室
参加者は12人(うち見学5名)でした。

発表「CoreDataとUndo」iOS/Mac

CoreDataのUndoをグループしたときに、登録の逆順に呼び出される保証はない。
というか順番が不定。CoreData的にはカスタムクラスを割り当てたほうがうまく動作する。

XcodeでNSManagedObjectのサブクラスもテンプレートが対応しているので、それにおまかせすればよい。

現在のCoreDataではモデルに”Ordered”の設定が可能になっている。 WWDC 2011 / Session 315参照。
ただし、(いまだに)自分でKVCアクセサを実装しないといけない。けっこうたいへん。

発表「Sony CameraRemoteAPI」Mac/iOS

SONYのレンズだけカメラ。スマートフォンに接続して使う。SDKが提供されていて、”Camera Remote API”を通しシャッターやズームが操作できる。接続はWIFIのアドホックのみ。SSDPで接続(HTTP)。

デモ。MacからHTTP経由でライブ画像を連続して取得。ズームイン/ズームアウト操作。

SSDPでのネゴシエーション時に、ブロードキャストするインターフェイス(アドレス)を指定する必要があることに注意。今は複数のインターフェイスある環境が多い。

  • Mac: 有線、WIFI
  • iOS: 3G回線、WIFI

など。

  • Q. GETで取ってくるって繰り返しリクエストするの?
  • A. GETは1回で複数のレスポンスが返ってくる。

発表「リマインダーの繰り返しを自由に指定する」Mac

リマインダーの繰り返しをアプリから指定可能なもの以外も設定したい。EventKitから操作すると、いろんな繰り返しが設定できる。

  • 3週間ごと
  • 毎月15日、月末
  • 毎月第1、第3水曜日

発表資料と解説(発表者のブログ)

発表「DictionaryServicesを使ったMigemoみたいな逐次検索」Mac

「ヒューメインインターフェイス」ジェフ・ラスキン 逐次検索を主体としたUI。
日本語だと漢字への変換があるため、アルファベットのように単純には検索できない。

ローマ字入力でのインクリメンタル検索としてはmigemoが有名どころ。

今回はObjective-C/Cocoaで類似のものを実装してみた。

デモ。青空文庫の吉川三国志テキストをローマ字入力の”sousou”から”曹操”を検索。(ひらがなの「そうそう」などもヒットする)

アプリの構成を解説。

  1. CoreFoundationのローマ字→かな変換を利用してひらがなを取得。
  2. OS付属の「辞書」のプライベートAPIを使って、かなから候補を取得。
  3. 候補一覧から正規表現を構成してテキスト検索。

Q. NSErrorの初期化はNULL or nilのどちらが正しい?
A. (結論出ず)

発表「SpriteKitを使ってみる」iOS

10.9とiOS7から利用可能。
ビュー > シーン > ノード という階層になっている。
ノードが画面上のアイテム。キャラクタ、ボールなど。

physicsBody描画と実体(当たり判定)サイズを別に指定できる。物理シミュレーションもphysicsBodyで指示する。

デモ。上からたくさん落ちてくる弾が操作キャラクタに当たると跳ね返る。

発表「ゲームコントローラを使ってみました」iOS

iPhoneに装着するタイプのゲームコントローラのSDKの話。iPhoneのゲームコントローラは次の2タイプ。

  • コネクタで接続(今回はこちら)
  • Bluetooth

方向キー、ボタンx4、LRがある。初代プレイステーションっぽい構成。
方向キーはアナログパッドで、日本のゲーム機に慣れてるとちょっと違和感あるかも。

SDKを使用して、キー入力を受け取るサンプルコードの説明。

コントローラ経由でUSB接続したときにMac/XcodeにiPhoneとして認識されないので実機デバッグがたいへん。

次回の予定

次回は4/5(土)に今日と同じ会場で開催予定です。

2/8(土) 64回Cocoa勉強会(関東)のお知らせ

次回の勉強会のお知らせです。見学の申し込みはconnpassのイベントページからお願いします。

2013-12-07 63回 Cocoa勉強会(関東)のレポート

会場は松戸シティホテルSENDAN-YAの貸し会議室。
参加者は13名(うち見学2名)でした。

「ドキュメントベースアプリをTab化する」Mac

前回のマルチウィンドウの続き。SafariやFinderのようなタブを持ったアプリの設計について。
PSMTabBarControlを使ってTab化する。

  • ドキュメントベースでないアプリのタブ化
  • ドキュメントベースのアプリのタブ化

をデモをしながら実装例を示した。

「Xcode Server みんなで使ってみる」Xcode

Xcode Serverでできること。

  • プロジェクト統合、アーカイブ
  • Git, Subversionのリポジトリサーバ
  • 複数のiOSデバイスの実機での自動テスト

単純にプライベートリポジトリとしてもサービス契約するよりも、OSX Serverの方が安価(買切り2,000円)というメリット。

Xcode Serverの

  • リポジトリサーバ
  • 継続的インテグレーション(CI) (Xcode Serverでは”Bot”が動いてテストを実行する)

のハンズオンを参加者で実施。→ネットワーク環境やサーバのディスク容量の問題などであまりうまくいかず。
(質疑応答など)

  • Q.コードでなくプロジェクトファイル(.xcodeproj)の修正のマージって問題起きがちだけど、みんなどうしてる?
  • A.関係者に「マージするよー」など周知するなどで対応。.XIBのマージも失敗するとかなり大変。

「iOS向けのフレームワーク化に挑戦」iOS

MacのようにiOS用の.frameworkを作成する手順について。

  • .frameworkの配置になるようシェルスクリプト等で作成
  • ライブラリの実体を静的ライブラリにする。

(質疑応答など)

  • stringsファイルはビルド時にアプリにコピーが必要(そのようにビルドするようにする)
  • アプリ側のコンパイル時に-objcが必要なので注意

「iOSアプリのデジタル署名」iOS

受託開発でストアへの提出を顧客にやってもらうケースでは、通常はプロジェクトファイルを納品して先方でXcode上で署名等を実施してもらうことが多い。けれど今回はそうではなく、

  1. ビルド済み未署名のアプリを納品
  2. 納品先で署名しストアに提出する

という形式にしたいことがあり、そのときにどのようにしたらよいかという話。

Xcodeの動作を調べて、どのような作業をしたらよいかをリストアップ。手順上どういった課題があるかをまとめた。

codesignコマンドについてはTN2206 Mac OS X Code Signing In Depthに詳しい。SHA1または”通称”で署名を指定する。

「Neerby Networking Multipeer Connectivity」iOS

iOS7からの機能。WIFIまたはBluetoothでデバイス間通信ができる。

  • Bonjourのようにサービスタイプの名前で接続する。
  • Gamekitと異なり、別アプリ間でも接続できる。
  • データ型などはないので、通信データの解釈はアプリで行う。

iPhone, iPad計3台でチャットアプリをデモ。

(質疑応答など)

  • Q. Mac上のシミュレータ上でも動く?
  • A. ダメ。実機が必要。

次回の予定

2/8(土)に新宿で開催します。

(reporter: kimuraw)

2013-10-19 62回 Cocoa勉強会(関東)のレポート

会場は水道橋の貸し会議室 内海でした。

以下、発表の概要です。

「新しい通信クラス群NSURLSessionを使ってみる」iOS

iOS7で導入された新しい通信APIのNSURLSessionについて。

長い間NSURLConnectionが使われてきましたがついに新しくなった。セッションとタスクを分けたことが大きい。

(通常の通信)

  • NSURLConnectionとは異なり、デリゲートなしで処理できる。
  • 通信完了後の処理はblocksで記述する。
  • デリゲート使う場合はNSURLConnectionとデリゲートメソッドが微妙に変わってるので注意。

(認証と証明書)

  • 以前は両方とも同じデリゲートだったが処理が分かれた。
  • 認証は以前のようにcredentialを返り値とするのでなく、用意したcredentialを使ってhandler(blocks)を呼び出す。
  • 証明書でオレオレ証明書を使うには証明書の処理をまるごと実装する必要あり。正規の証明書の処理をCoreFoundationを使って書く。

全体としてすごく使いやすくなっていて、iOS7以降ならNSURLConnectionを使う理由はもうない!

議論など

  • Q.オレオレ証明書って使うの?
  • A.要件としてそういうお仕事がわりとあるらしい。大学など組織で自己CA立ててるケースやExchangeのテストとか。

「APIを前方互換に拡張する」Mac?

古いOSでも新しいAPIを使いたい。自分で同じ機能をカテゴリと実装して

if (新しいOS) {
  OSの実装;
} else {
  自分の実装;
}

としていた。これは不要になったときにコード修正個所が多いし、複数の開発者でやってると同じようなことを別々に実装してしまったりという問題もあった。

今回はObjective-Cの動的メソッド追加を利用して改善する。

  • ランタイム関数class_addMethodなどを使う。
  • メソッドの有無をrespondToSelector:で判定し、なかったら自前実装のメソッドを追加。
  • +initialize で上述の処理を行う。
  • 利用箇所ではそのまま新しいAPIを呼ぶように書く。

とする。

議論など

  • Q. クラスメソッドでもできる?
  • A. メタクラスに同じようにしてやればよい。
  • Q. 初期化時にインスタンス生成して、respondToSelector:するのは副作用の心配がある。いくつかのクラ- スでは「最初に生成されたインスタンス」に重要な意味があるから。
  • A. クラスメソッドのinstancesRespondToSelector:使うのが良いのでは。

「RFC Viewerの紹介」iOS

今までのアプリ開発のパターンをまとめた。MVCで考える。

  • モデル: singletonで管理する。
  • データの保存と読み出しのインターフェイスを統一する。UserDefaultsも同様。
  • 通信では応答の処理にblocksを使うようにした。並列で通信するとき要求と応答の関連を明確にするため。

おまけ QA1176

Technical Q&A QA1176 Getting a Packet Traceが訳にたった。iOSアプリのデバッグでクライアントとサービス側のどちらに問題があるか調査するときに便利。

  • rvictlコマンドを使うと、MacでiOS機器のtcpdumpが取れる。(rvi=remote virtual interface)
  • Macと対象のiOS機器をUSB接続している必要がある。

議論など

  • Singleton使うこと多い
  • NSDocumentってモデルじゃなくてコントローラだよね。そもそもCocoaのMVCって本来のMVCからはずれてない?
  • MVCよりも、PACで考えるほうがわかりやすいかも。

「ClangのModules」Xcode

自分の発表。Xcode5から導入された”Modules”の機能について、主にClang側からの視点で話した。

  • コンパイルが速くなる(らしい)
  • module.mapというファイルがあれば使える。
  • ふつうのアプリ開発者は全く気にしなくて良い。勝手にXcodeがめんどう見てくれる。

「Cocoaでマルチウィンドウ」Mac

NSDocument/NSDocumentControllerの話ではなくって、アプリ(A)-モデル(M)-ウィンドウ(W)の関連ごとの設計の話。関連の1対1、1対多の組み合わせで次の4種類に分ける。

No. A:M M:W
(1) 1:1 1:1 計算機
(2) 1:N 1:1 辞書やMail.app
(3) 1:1 1:N PagesやKeynote
(4) 1:N 1:M PhotoshopやOmniGraffle

Todoアプリを作成しそれぞれのモデルの実装について説明。ウインドウのidentifierの管理など。

タブは1ウインドウに多ドキュメントだけどどうしよう?

議論など

  • 見た目が単純でも複雑なパターンを使って実装することが多い。
  • (1)(2)に相当するアプリでもUIDocument使う。

「不要になったシミュレータを捨てる方法」Xcode

Xcodeで古いiOSのシミュレータをインストールすることができるけれど

/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/

にあるファイルを消すだけではダメで、Xcodeの次回起動時に「もう一度ダウンロードする?」とのダイアログが表示されてしまう。

~/Library/Caches/com.apple.dt.Xcode/Downloads

の.dmgファイルも削除することで再ダウンロードの確認も行われなくなる。ディスク使用量の削減的にもこっちも削除したほうがよい。

議論など

  • Xcode5でMacによってiOS5のシミュレータが表示されたりされなかったりした。これってCachesの影響なのでは?

次回の予定

12/7(土)に千葉県の松戸で開催します。

(reporter: kimuraw)

2013-09-07 61回 Cocoa勉強会(関東)のレポート

会場は新宿伊藤ビルの貸し会議室でした。

以下発表など。

「メインスレッド外でNSURLConnection」iOS/Mac

“NSURLConnectionはメインスレッドじゃないと使えない”という通説があるけれども、そんなことはないよ、という話。

  • delegateをふつうに実装するとメインスレッドで実行されるためUIのパフォーマンスに影響してしまう。
  • GCD/NSOperationが並行実行にきょうび使われるテクニック。
  • [connection setDelegateQueue:]\, [connection start]しないと操作が実行されないことに注意!
    – iOS6以降(iOS5はバグってて動かない)、Lion以降
  • RunLoopでがんばる方式も確立されてて、旧バージョンのOSだと有効。

「ARCにおけるRetainCountのデバッグ」Generic

メモリリークを力技で調査する話。

  • CFGetRetainCount()でretain countを調べる。
  • method swizzlingでretain/release/dealloc中に仕込む。
    – コールスタックも-[NSThread callStackSymbols]で取得しておく。

実際にリーク50超という状態をこの方法で調べて解消することができた。
主な原因はNSManagedObjectContextのbind時のretain。明示的にunbind:が必要。ARCだってリークするよ。

(質疑応答)

  • Q.Instrumentsで調査できなかったけ?
  • A.Instruments使ってないので…次回?Instrumentsの使い方の発表が期待されています。

「状態の保存と復元」iOS

iOS6から導入された、State Preservation and Restorationの機能とAPIについて。

  • 動作
    – アプリがバックグラウンドに→保存
    – アプリがアクティブに→復元
    – アプリが終了→状態を破棄
  • 保存の対象はビューコントローラ(+ビュー)、アプリケーションデータはここで保存しないことが推奨されている。
  • XIB上でビューコントローラの”Restoration ID”でIDを付与。

サンプルによるデモ。

(質疑応答)

  • Q.アプリをアップデートしたときの動作は?
  • A.一度アプリが終了するので(なにもしなければ)初期画面が表示される。
  • Q.復元をキャンセルすることはできる?
  • A.delegateメソッドで復元するかどうかを選択できる。

(関連の話題)

アラートやシートを復元時に表示するかどうか。
そのままなら復元する。Appleは復元時には非表示にしているようだが、そのように実装するのはけっこう大変。

複数アラートでてるときの処理とかは…?→アラートは必ず1つしか出さないよう制御する派がちらほら。

「CocoaPods基礎編」iOS/Mac

ライブラリ管理ユーティリティCocoaPodsの導入と使い方について。

  • プロジェクトで利用するライブラリを管理する仕組み。
  • Rubyのbundlerみたいの。
  • コマンドラインで操作する。

以下が決め手となって使っている。

  • ソース、リソース、ライブラリの管理が容易に。
  • バイナリのライブラリのみが提供されるケースや、非公開の自社ライブラリも管理できる。

実際のセットアップ、アプリをcocoapodsに移行させる、ライブラリのバージョンアップのデモ。
直接ターゲットのプロジェクトに組み込むのでなくワークスペースを利用してpodの静的ライブラリをビルドする別プロジェクトを用意するようになっていたり、.xcconfigを利用するなど実際にどのように実現されているかを説明。

podの探し方

  • cocoaobjects, cocoacontrolsを見たり、評判の良いものを試してみたりなど。
  • searchコマンドで探すのは無理。

(質疑応答)

  • Q.画像などのリソースは?
  • A.ビルドフェーズでコピーされるようになっている。
  • Q.Podsのプロジェクトのコード等もバージョン管理システムに入れる?
  • A.入れている。ただこれはポリシー次第で、Podfileのみでもよい(はず?)
  • Q.Subversionのexternalsやgitのsubmoduleでも実現可能では?
  • A.以前はそのようにしていたがCocoaPodsのほうが扱いやすい。

次回は実践編。podの作成〜公開、社内のみでの利用の手法など。

その他

NSURLのpath操作

[NSURL URLByAppendingPathComponent:]がNSStringと動作が異なっててハマった。

  • http://foo/ + /bar => http://foo//bar 古いiOSのバージョンのみで起きる
  • サーバによってはURLを補正してくれる(Apacheなど)ので問題が再現したりしなかったりでハマる

そもそもNSStringと比べてNSURLのappending…は遅いので注意。
また、fileスキーマではパスにディレクトリが実在するかで結果が変わったりするので注意。

インスタンス変数の可視性

カテゴリでのインスタンス変数へのアクセスには明示的に変数の宣言が必要。プロパティを宣言しただけでは内部変数は可視でないのでカテゴリ実装中ではアクセスできない。(コンパイルエラー)

(reporter: kimuraw)

2013-07-06 60回 Cocoa勉強会(関東)のレポート

会場は新宿伊藤ビルの貸し会議室

以下発表など。

Bluetooth LE (iOS)

  • Core Bluetooth(iOS5から)
    – iOS6ではcentralだけでなくperipheralモードにも対応
  • Bluetooth LEのプロトコル/GATT
  • logitecのカメラリモコンでのサンプルとデモ
  • Service UUIDやCharactaristic UUIDを調べるのにはBLExplrが便利

話題に出たリソース。

Driverについて (Mac)

  • ドライバの実装はkextとIOKitの2通り
    – kext: Cでcallback関数を書く。明示的に起動/停止が必要。
    – IOKit: IOKitの派生クラスを書く。自動でロード/アンロードされる。
  • それぞれのサンプルと動作確認例
  • 32 64の両方を有効にしてビルドすることに注意

Common Cryptoを使った共通鍵の暗号と復号 (iOS/Mac)

  • 関係するdeveloper文書の概要
  • Common Crypto → 10.7のCC_cryptoのman参照
  • 新しいSecTransform
    – 10.7移行、GCD対応
    – まだ整備中といった感じ

PoiCa Sensorの仕組み (iOS)

いろいろなお店のアプリ(ポイント、割引など)と連携して動作するアプリ[PoiCa](http://poica.me]の仕組みと方針について。 該当店舗に入店すると通知して。

  • Wifi-専用機器(raspberry pi)-サーバといった構成(資料の図参照)
  • iOS, AndroidのSDK(店舗側のアプリ組込み用あり)
  • 方針: ユーザとのフェアな関係、セキュリティの担保

ZIPについて (Mac)

  • 歴史的なこともあり、やたらデータ/APIがややこしい。
    – ファイルの構造
  • ライブラリ: minizip, Objective-ZIP, ZipKit
  • コマンドラインを使うのがいちばん確実かも…?

その他の話題

  • cocoapods便利!
  • 10.9をVMWareで試すには、先に10.8インストールしておく必要あり。

(reporter: kimuraw)

Categories
Bookmarks