Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.
4年前のカメラアプリを 
Swiftで書き直した 
株式会社トルクス 山田宏道 
2014年11月26日 
主催・会場:株式会社アクロビジョン
自己紹介、会社紹介
自己紹介、会社紹介 
「TAPP」 
「TAPP Manager」 
「OSS Sampler」
自己紹介、会社紹介
FrameCamera:制作経緯 
• 2009年、iPhone 3GS購入! 
• 「iPhoneアプリ作ってみたい!」 
• 「カメラの上に画像を載せて撮影してみたい!」 
• あわよくば、一攫千金! 
• 2009年末に試作開始。
FrameCamera:リリース 
• 友人にアイコンデザイン頼んだりしつつ、実装 
• 2010年3月3日にリリース!
FrameCamera:Ver.Up 
• 【1.0】2010/3/3 
• 【1.1】2010/3/18 
• 【1.2】2010/3/29 :Twitter投稿対応(Twitpic) 
• 【1.3】2010/7/13 
• 【1.4】20...
FrameCamera:1.4 
• 【1.4】2010/9/2:iOS4対応! 
• iOS SDK 4でビルドした程度 
• iPhone 4(2010年6月発売)には未対応 
• →「Retina、フロントカメラ、フラッシュ」未対応 
•...
FrameCamera:夏 
• 2014年6月:Swift登場! 
• 夏の終わり、ちょっと時間ができた! 
• 勉強を兼ねて再作成開始!初Swiftプロジェクト!
FrameCamera:開発 
• 2014年9月2日:作業開始 
• 4日目で大体画像を選んでカメラに合成するところまで完 
了(実質、2人日弱くらい?) 
• 新機能等の調整を含めて、申請まで大体6人日弱 
• 助かった:AVFoundat...
開発方針 
• 「機能はそのまま」を目標に開発をする 
• Storyboard採用 
• カメラの上にフレームを表示する表現 
• これまで:Viewを組み合わせてページングを実装 
• 今なら:AVFoundation+UICollecti...
いきなり結論 
• 自分の知っているコードをSwiftに移植するのは、 
「Swiftを学ぶ」という観点で正解だった! 
(新規プロジェクトで採用するより) 
プログラミング言語 
(Obj-C, Swift) 
SDK 
(iOS SDK) ...
便利 
ヘッダーファイルがない! 
• C/C++/Obj-Cに慣れていると違和感。 
• が、慣れるといい! 
• プロジェクトがすっきりする! 
• 初心者に説明しやすい 
• ソースの見通しが悪くならないように気 
をつけるようになる
便利 
クラス宣言は直感的! 
• 他言語にありがちな形なので、すぐ理解できた
enumは結構違う 
ハマる 
• Objective-Cのenum(NS_ENUM)とはちょっと使 
い勝手が違う。 
• 即値ではない 
使い方を意識して変える必要がある 
• toRaw() で数値等に変換できる 
fromRaw() で...
enumは結構違う 
便利 
• Obj-C→Swiftの自動変換が素晴らしい! 
NS_ENUM (NSUInteger, MyEnum) { 
MyEnumA, 
MyEnumB, 
MyEnumC, 
}; 
enum MyEnum: I...
便利 
Obj-Cとの連携は簡単 
• SwiftのプロジェクトにObjective-Cのコードやライブ 
ラリを追加するのは簡単 
• “ProjName-Bridging-Header.h”を作成し、プロジェク 
トに追加する。(Obj-C...
困った 
Optional、、、どうなの? 
• Swift最大の問題児!? 
• Swift:変数にnilを入れられない 
• Swift:型が違うと自動で変換してくれない 
• でも、実際それじゃ困る!ということへの対応が 
Optiona...
困った 
Optional:ステップ1 
• 基本 
var ngName : String = nil // NG!!! 
var myName : String? = nil // OK!!! 
String? .. String OR n...
困った 
Optional:ステップ2 
• メソッド、プロパティを使うときの問題 
var myName : String? = “test” 
var upper = myName.uppercaseString // NG 
String...
困った 
Optional:ステップ3 
• OptionalをUnwrapする方法 
// 1. 
if( myName != nil ){ 
var upper = myName!.uppercaseString 
} 
// 2. 
va...
困った 
Optional:ステップ4 
• Optional宣言面倒。への対応 
var myName : String! = “test” 
var lower = myName.lowercaseString 
… Implicitly ...
困った 
Optional、、、どうなの? 
• まとめ 
• Optional、ちょっと面倒だけど、、 
• 高速化、実行時の安全のため、と思って… 
ソース 
ビルド 
アプリ実機で実行 
<Optionalの話:おわり>
教訓 
DelegateはProtocol 
• Delegateは、Protocolという同等の機能になる 
• 基本的にメソッドの実装が必要となるが、下記のよ 
うにすれば、optionalなメソッドも定義可能 
@objc protoco...
教訓 
無理にStringを使わない 
• String, Dictionary, ArrayはNSString, NSDictionary, 
NSArrayから置き換えられるが、メソッドは使えない。 
• NSString, NSDicti...
単語や演算子間の 
スペースが超重要! 
教訓 
• “=“ の前後にスペースを開けないとエラーになること 
があった! 
(最新版のXcode 6.0.1あたりの話)
教訓 
Xcodeは旧バージョンを残す 
• Xcodeをバージョンアップすると、Swiftも変わる。 
• Swiftの文法が変わってビルドできなくなる! 
(実際、何度かありました。。) 
• 1日程度は余裕を持って新バージョンを試しましょ...
アップできなかった! 
• Xcode 6.1(の特定ビルド?) でビルドして申請し 
ようとしたら、アップできなかった。。 
詳細: 
http://labs.torques.jp/2014/10/24/3736/ 
「Xcode 6.1が怖...
教訓 
スクリーンショット準備が大変 
• 画面サイズが増えた。 
• 多言語対応していると、、
おすすめ検索方法 
教訓 
• ググる時に期間指定をする!
株式会社トルクス 
facebook.com/torques.inc 
↑  
エンジニアの皆さんに有益な情報を流すよう 
努力しますので、 
「いいね!」してもらえると嬉しいです! 
お仕事、開発パートナーも募集中! 
(Oculus, Un...
4年前のカメラアプリをSwiftで書きなおした
4年前のカメラアプリをSwiftで書きなおした
Upcoming SlideShare
Loading in …5
×

4年前のカメラアプリをSwiftで書きなおした

8,105 views

Published on

Torques Inc.では「FrameCamera」というアプリを4年ぶりにすべて書き直し、先月リリースしました。
本アプリは今後機能追加を続けていく方針で、これまでのコードは捨てて、Swiftで書き直しました。
アプリをリリースするまでにハマった点を中心に、Objective-Cによる開発との違いなどを紹介したいと思います。
「Swiftに興味がある」「Swiftで開発したい」という方に向けて、実際開発に使えるのか?という経験談を話したいと思います。

Published in: Technology
  • I’ve personally never heard of companies who can produce a paper for you until word got around among my college groupmates. My professor asked me to write a research paper based on a field I have no idea about. My research skills are also very poor. So, I thought I’d give it a try. I chose a writer who matched my writing style and fulfilled every requirement I proposed. I turned my paper in and I actually got a good grade. I highly recommend ⇒ www.HelpWriting.net ⇐
       Reply 
    Are you sure you want to  Yes  No
    Your message goes here
  • Dating direct: ❤❤❤ http://bit.ly/2Qu6Caa ❤❤❤
       Reply 
    Are you sure you want to  Yes  No
    Your message goes here
  • Follow the link, new dating source: ❤❤❤ http://bit.ly/2Qu6Caa ❤❤❤
       Reply 
    Are you sure you want to  Yes  No
    Your message goes here
  • If you want to download or read this book, copy link or url below in the New tab ......................................................................................................................... DOWNLOAD FULL PDF EBOOK here { http://bit.ly/2m77EgH } ......................................................................................................................... Download EPUB Ebook here { http://bit.ly/2m77EgH } .........................................................................................................................
       Reply 
    Are you sure you want to  Yes  No
    Your message goes here

4年前のカメラアプリをSwiftで書きなおした

  1. 1. 4年前のカメラアプリを Swiftで書き直した 株式会社トルクス 山田宏道 2014年11月26日 主催・会場:株式会社アクロビジョン
  2. 2. 自己紹介、会社紹介
  3. 3. 自己紹介、会社紹介 「TAPP」 「TAPP Manager」 「OSS Sampler」
  4. 4. 自己紹介、会社紹介
  5. 5. FrameCamera:制作経緯 • 2009年、iPhone 3GS購入! • 「iPhoneアプリ作ってみたい!」 • 「カメラの上に画像を載せて撮影してみたい!」 • あわよくば、一攫千金! • 2009年末に試作開始。
  6. 6. FrameCamera:リリース • 友人にアイコンデザイン頼んだりしつつ、実装 • 2010年3月3日にリリース!
  7. 7. FrameCamera:Ver.Up • 【1.0】2010/3/3 • 【1.1】2010/3/18 • 【1.2】2010/3/29 :Twitter投稿対応(Twitpic) • 【1.3】2010/7/13 • 【1.4】2010/9/2:iOS4対応! • ~ 4年間放置!
  8. 8. FrameCamera:1.4 • 【1.4】2010/9/2:iOS4対応! • iOS SDK 4でビルドした程度 • iPhone 4(2010年6月発売)には未対応 • →「Retina、フロントカメラ、フラッシュ」未対応 • ARC まだ無いので未対応(iOS 5から) • AVFoundation?Storyboard?CollectionView?
  9. 9. FrameCamera:夏 • 2014年6月:Swift登場! • 夏の終わり、ちょっと時間ができた! • 勉強を兼ねて再作成開始!初Swiftプロジェクト!
  10. 10. FrameCamera:開発 • 2014年9月2日:作業開始 • 4日目で大体画像を選んでカメラに合成するところまで完 了(実質、2人日弱くらい?) • 新機能等の調整を含めて、申請まで大体6人日弱 • 助かった:AVFoundation、UICollectionView、 Storyboard!という機能群 • Swift特有の話を続けます
  11. 11. 開発方針 • 「機能はそのまま」を目標に開発をする • Storyboard採用 • カメラの上にフレームを表示する表現 • これまで:Viewを組み合わせてページングを実装 • 今なら:AVFoundation+UICollectionView
  12. 12. いきなり結論 • 自分の知っているコードをSwiftに移植するのは、 「Swiftを学ぶ」という観点で正解だった! (新規プロジェクトで採用するより) プログラミング言語 (Obj-C, Swift) SDK (iOS SDK) Tools (Xcode) アルゴリズム
  13. 13. 便利 ヘッダーファイルがない! • C/C++/Obj-Cに慣れていると違和感。 • が、慣れるといい! • プロジェクトがすっきりする! • 初心者に説明しやすい • ソースの見通しが悪くならないように気 をつけるようになる
  14. 14. 便利 クラス宣言は直感的! • 他言語にありがちな形なので、すぐ理解できた
  15. 15. enumは結構違う ハマる • Objective-Cのenum(NS_ENUM)とはちょっと使 い勝手が違う。 • 即値ではない 使い方を意識して変える必要がある • toRaw() で数値等に変換できる fromRaw() で数値等から変換できる
  16. 16. enumは結構違う 便利 • Obj-C→Swiftの自動変換が素晴らしい! NS_ENUM (NSUInteger, MyEnum) { MyEnumA, MyEnumB, MyEnumC, }; enum MyEnum: Int { case A case B case C } • SwiftのenumをObjective-Cで使う方法は無い様子 …
  17. 17. 便利 Obj-Cとの連携は簡単 • SwiftのプロジェクトにObjective-Cのコードやライブ ラリを追加するのは簡単 • “ProjName-Bridging-Header.h”を作成し、プロジェク トに追加する。(Obj-Cのソースを新規で追加しようと すると自動で生成してくれる。うまくいかない場合、プ ロジェクト設定で指定) • 呼び出すObj-Cのヘッダーをimportする文を書くだけ!
  18. 18. 困った Optional、、、どうなの? • Swift最大の問題児!? • Swift:変数にnilを入れられない • Swift:型が違うと自動で変換してくれない • でも、実際それじゃ困る!ということへの対応が Optionalという仕組み
  19. 19. 困った Optional:ステップ1 • 基本 var ngName : String = nil // NG!!! var myName : String? = nil // OK!!! String? .. String OR nil var myName : Optional<String> = nil // OK!!! 「Optionalでwrapされている」状態↑
  20. 20. 困った Optional:ステップ2 • メソッド、プロパティを使うときの問題 var myName : String? = “test” var upper = myName.uppercaseString // NG String? の型の変数では、String としては使えない Unwrapする必要がある↓ var upper = myName?.uppercaseString // OK // ?の違い、Optional Chaining、Xcodeの入力支援
  21. 21. 困った Optional:ステップ3 • OptionalをUnwrapする方法 // 1. if( myName != nil ){ var upper = myName!.uppercaseString } // 2. var upper = myName?.uppercaseString // ↑この upper の型は?? var upper : String? = myName?.uppercaseString // myNameがnilの可能性!
  22. 22. 困った Optional:ステップ4 • Optional宣言面倒。への対応 var myName : String! = “test” var lower = myName.lowercaseString … Implicitly Unwrapped Optional // myNameがnilだったら?? →実行時エラー
  23. 23. 困った Optional、、、どうなの? • まとめ • Optional、ちょっと面倒だけど、、 • 高速化、実行時の安全のため、と思って… ソース ビルド アプリ実機で実行 <Optionalの話:おわり>
  24. 24. 教訓 DelegateはProtocol • Delegateは、Protocolという同等の機能になる • 基本的にメソッドの実装が必要となるが、下記のよ うにすれば、optionalなメソッドも定義可能 @objc protocol MyProtocol { optional func funcXXX() -> String }
  25. 25. 教訓 無理にStringを使わない • String, Dictionary, ArrayはNSString, NSDictionary, NSArrayから置き換えられるが、メソッドは使えない。 • NSString, NSDictionary, NSArrayをそのまま使うほう が便利! var infoDic : NSDictionary! = NSBundle.mainBundle().infoDictionary as NSDictionary! let bundleVersion = infoDic.valueForKey("CFBundleShortVersionString") as NSString!
  26. 26. 単語や演算子間の スペースが超重要! 教訓 • “=“ の前後にスペースを開けないとエラーになること があった! (最新版のXcode 6.0.1あたりの話)
  27. 27. 教訓 Xcodeは旧バージョンを残す • Xcodeをバージョンアップすると、Swiftも変わる。 • Swiftの文法が変わってビルドできなくなる! (実際、何度かありました。。) • 1日程度は余裕を持って新バージョンを試しましょう
  28. 28. アップできなかった! • Xcode 6.1(の特定ビルド?) でビルドして申請し ようとしたら、アップできなかった。。 詳細: http://labs.torques.jp/2014/10/24/3736/ 「Xcode 6.1が怖い理由 « TORQUES LABS」 ハマった
  29. 29. 教訓 スクリーンショット準備が大変 • 画面サイズが増えた。 • 多言語対応していると、、
  30. 30. おすすめ検索方法 教訓 • ググる時に期間指定をする!
  31. 31. 株式会社トルクス facebook.com/torques.inc ↑  エンジニアの皆さんに有益な情報を流すよう 努力しますので、 「いいね!」してもらえると嬉しいです! お仕事、開発パートナーも募集中! (Oculus, Unity, Arduino, Raspberry Pi等、いろいろ準備中です!)

×