Upload
-
View
4.508
Download
7
Embed Size (px)
Citation preview
自己紹介
- 佐藤俊輔(@ushisantoasobu)
- 株式会社ピースオブケイク
- 元々デザイナーぽいことやっていた、4年前からエンジニア
- iOS歴 1年 + 半年(iOS7が出たころあたりがブランク)
- Swiftコーディング規約@Wantedly
- 書籍「詳解 Swift」
- あとは適宜調べる
参考にしたもの
XCodeがまだ不安定..
- ビルドが遅い
- SourceKitうんちゃら(画像のもの)
- renameのリファクタリングがまだできない
- 他にも、APIの実装がまだだったので、クラスファイル内にテストデー
タとして長い文字列定義したら、ファイルのインデックスがとまったり
- そもそもまだそんなにSwift製のライブラリない
- あっても採用実績少ないのでバグは多分にありそう
- Objcの移植のものでも部分部分で未実装のところもある可能性有
- CocoaPods 0.36 beta?? Carthage??
=> productionなら、しばらくは無理に使う必要ないかなと思ったり
Swift製のライブラリについて
Objcの既存のコードをSwiftに書き換えたときに地味に面倒かったもの
- (void)test { int a = 2; CGFloat b = 4.5; CGFloat c; c = a + b; }
Objc
func test() { var a :Int = 2 var b :CGFloat = 4.5 var c :CGFloat = 0.0 c = a + b }
Swift
- (void)test { int a = 2; CGFloat b = 4.5; CGFloat c; c = a + b; }
Objc
func test() { var a :Int = 2 var b :CGFloat = 4.5 var c :CGFloat = 0.0 c = a + b }
Swift
コンパイル通らない
Objcの既存のコードをSwiftに書き換えたときに地味に面倒かったもの
- ( c = a + b; }
Objc
func c }
Swift
コンパイル通らない
Swiftだと、数値型の計算は暗黙の型変換は行われない
Objcの既存のコードをSwiftに書き換えたときに地味に面倒かったもの
Objc Swift
Objcの既存のコードをSwiftに書き換えたときに地味に面倒かったもの
func plot(samples :UnsafePointer<Float32>) { //... for var i = 0; i < sampleCount; i++ { var sample = Float32(samples.memory) samples = samples.successor() //... } //... }
- (void)plotLogGraph:(Float32 *) samples { //... for (NSInteger i = 0; i < sampleCount; i++) { Float32 sample = *samples++; //... } //... }
Objc Swift
Objcの既存のコードをSwiftに書き換えたときに地味に面倒かったもの
func plot(samples :UnsafePointer<Float32>) { //... for var i = 0; i < sampleCount; i++ { var sample = Float32(samples.memory) samples = samples.successor() //... } //... }
- (void)plotLogGraph:(Float32 *) samples { //... for (NSInteger i = 0; i < sampleCount; i++) { Float32 sample = *samples++; //... } //... }
Objc Swift
Objcの既存のコードをSwiftに書き換えたときに地味に面倒かったもの
func //... for samples } //... }
- (void //... for } //... }
ポインタまわりに少し戸惑う
archiveコマンド
http://kishikawakatsumi.hatenablog.com/entry/2014/11/02/145255
http://blog.ishkawa.org/2015/01/07/1420556760/
を参考に、
iTunesConnectへのバイナリのアップロードを
自動化しようと目論む
https://devforums.apple.com/message/1042117#1042117
問題なくできたかな..と思ったけどこんなスレが
archiveコマンド
コマンドからバイナリを生成したときに、
swiftモジュールが含まれず申請しても
invalidでリジェクトくらう的な内容
archiveコマンド
https://devforums.apple.com/message/1042117#1042117
申請の締め切りも迫っていたので結局XCodeからアップロード > <
archiveコマンド
コマンドからバイナリを生成したときに、
swiftモジュールが含まれず申請しても
invalidでリジェクトくらう的な内容
https://devforums.apple.com/message/1042117#1042117
AutoLayout + CGAffineTransform
http://stackoverflow.com/questions/26088559/autolayout-cgaffinetransform-ios7-ios8
AutoLayoutを設定したviewに対して
CGAffineTransformのscaleがiOS7だと効かない??
AutoLayout + CGAffineTransform
=>ちょっとした演出のために入れていたものなのでiOS7は切った
AutoLayoutを設定したviewに対して
CGAffineTransformのscaleがiOS7だと効かない??
http://stackoverflow.com/questions/26088559/autolayout-cgaffinetransform-ios7-ios8
カスタムトランジッション
func pop_animationDidStop(anim: POPAnimation!, finished: Bool) { if self.context!.transitionWasCancelled() { self.context!.completeTransition(false) } else { self.context!.completeTransition(true) if self.isReverse { let to = self.context!.viewControllerForKey(UITransitionContextToViewControllerKey)! as UIViewController UIApplication.sharedApplication().keyWindow?.addSubview(to.view) } } }
http://stackoverflow.com/questions/24338700/from-view-controller-disappears-using-uiviewcontrollercontexttransitioning
ここらへんの処理をいれてあげる
var vc = FirstPresentViewController() if isSystemVersionLessThan("8.0") { var root = UIApplication.sharedApplication().delegate?.window??.rootViewController root?.modalPresentationStyle = UIModalPresentationStyle.CurrentContext } else { vc.modalPresentationStyle = UIModalPresentationStyle.OverFullScreen } self.presentViewController(vc, animated: false, completion: nil)
var vc = SecondPresentViewController() if isSystemVersionLessThan("8.0") { self.presentedViewController?.modalPresentationStyle = UIModalPresentationStyle.CurrentContext } else { vc.modalPresentationStyle = UIModalPresentationStyle.OverFullScreen } self.presentedViewController?.presentViewController(vc, animated: false, completion: nil)
モーダル表示
さらにそこにモーダル表示
モーダル的な(裏の画面が見えつつ画面を重ねてく)
他
- UIAlertView / UIAlertController => ラッパつくった
- UIActionSheet / UIAlertController => ラッパつくった
- remoteNotificationまわり
- UITableViewCellのボタンがiOS7だと押せない
(contentView.userInteractionEnabled = false)
- 思ったよりもiOS7 / 8で挙動が違うところある所感
- なので当たり前だけど、動作テストはしっかりやる
- そもそもあんま気取ったことはやらないほうが無難??
- やるならハマることもあり得るので見積もりは慎重に
iOS7 / 8挙動の違い まとめ
- 画面のどこからでもいいので、一定量右にスワイプすると戻る
- 「エッジスワイプ」の全画面版
- スクロール最上部から下に引っ張る
- All Direction Pull Back!!
「戻る」の主な対策
- 画面のどこからでもいいので、一定量右にスワイプすると戻る
- 「エッジスワイプ」の全画面版
- スクロール最上部から下に引っ張る
- All Direction Pull Back!!
✔️
今回の開発で採用したもの
「戻る」についてのまとめ
- 何かしら対策入れてあげるとユーザビリティ的にはいいかも
- 他のジェスチャと干渉しないよう、設計に気をつけること(大事)
- でもいずれiOS9とかで何か標準実装されたり??
http://qiita.com/ushisantoasobu/items/fb1e7c2672f6ae815109
http://qiita.com/tdksk/items/36d892fca5fcba07f8eb
「戻る」についての参考サイト
http://ushisantoasobu.hateblo.jp/entry/2015/01/22/104258
ちなみに今回のプロジェクトから
デザイナー/エンジニア間でのワークフローに
“Sketch”を使っている
- AutoLayout情報込みのカンプをつくる
- 全デバイス毎のデザインを用意して、そこからエンジニアが読み解く
- 直接デザイナーに訊く
- デザイナー自身がXCodeで組み込む
考えられる対策
- AutoLayout情報込みのカンプをつくる
- 全デバイス毎のデザインを用意して、そこからエンジニアが読み解く
- 直接デザイナーに訊く
- デザイナー自身がXCodeで組み込む
✔️
考えられる対策
会社の規模が近い、デザイナーとの席が近い、デザイナーと仲がいい
などの要因があってこれでなんとかできてるけど、
大きな会社だったりデザインを外注するときなんかにはどうしてるのだろう…??
考えられる対策
- AutoLayout情報込みのカンプをつくる
- 全デバイス毎のデザインを用意して、そこからエンジニアが読み解く
- 直接デザイナーに訊く
- デザイナー自身がXCodeで組み込む
✔️
考えられる対策
- AutoLayout情報込みのカンプをつくる
- 全デバイス毎のデザインを用意して、そこからエンジニアが読み解く
- 直接デザイナーに訊く
- デザイナー自身がXCodeで組み込む✔️
現在隣の席のデザイナーに誠意啓蒙中
!