SlideShare uma empresa Scribd logo
1 de 33
Baixar para ler offline
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】2010/9/2:iOS4対応! 
• ~ 4年間放置!
FrameCamera:1.4 
• 【1.4】2010/9/2:iOS4対応! 
• iOS SDK 4でビルドした程度 
• iPhone 4(2010年6月発売)には未対応 
• →「Retina、フロントカメラ、フラッシュ」未対応 
• ARC まだ無いので未対応(iOS 5から) 
• AVFoundation?Storyboard?CollectionView?
FrameCamera:夏 
• 2014年6月:Swift登場! 
• 夏の終わり、ちょっと時間ができた! 
• 勉強を兼ねて再作成開始!初Swiftプロジェクト!
FrameCamera:開発 
• 2014年9月2日:作業開始 
• 4日目で大体画像を選んでカメラに合成するところまで完 
了(実質、2人日弱くらい?) 
• 新機能等の調整を含めて、申請まで大体6人日弱 
• 助かった:AVFoundation、UICollectionView、 
Storyboard!という機能群 
• Swift特有の話を続けます
開発方針 
• 「機能はそのまま」を目標に開発をする 
• Storyboard採用 
• カメラの上にフレームを表示する表現 
• これまで:Viewを組み合わせてページングを実装 
• 今なら:AVFoundation+UICollectionView
いきなり結論 
• 自分の知っているコードをSwiftに移植するのは、 
「Swiftを学ぶ」という観点で正解だった! 
(新規プロジェクトで採用するより) 
プログラミング言語 
(Obj-C, Swift) 
SDK 
(iOS SDK) 
Tools 
(Xcode) アルゴリズム
便利 
ヘッダーファイルがない! 
• 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: Int { 
case A 
case B 
case C 
} 
• SwiftのenumをObjective-Cで使う方法は無い様子 
…
便利 
Obj-Cとの連携は簡単 
• SwiftのプロジェクトにObjective-Cのコードやライブ 
ラリを追加するのは簡単 
• “ProjName-Bridging-Header.h”を作成し、プロジェク 
トに追加する。(Obj-Cのソースを新規で追加しようと 
すると自動で生成してくれる。うまくいかない場合、プ 
ロジェクト設定で指定) 
• 呼び出すObj-Cのヘッダーをimportする文を書くだけ!
困った 
Optional、、、どうなの? 
• Swift最大の問題児!? 
• Swift:変数にnilを入れられない 
• Swift:型が違うと自動で変換してくれない 
• でも、実際それじゃ困る!ということへの対応が 
Optionalという仕組み
困った 
Optional:ステップ1 
• 基本 
var ngName : String = nil // NG!!! 
var myName : String? = nil // OK!!! 
String? .. String OR nil 
var myName : Optional<String> = nil // OK!!! 
「Optionalでwrapされている」状態↑
困った 
Optional:ステップ2 
• メソッド、プロパティを使うときの問題 
var myName : String? = “test” 
var upper = myName.uppercaseString // NG 
String? の型の変数では、String としては使えない 
Unwrapする必要がある↓ 
var upper = myName?.uppercaseString // OK 
// ?の違い、Optional Chaining、Xcodeの入力支援
困った 
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の可能性!
困った 
Optional:ステップ4 
• Optional宣言面倒。への対応 
var myName : String! = “test” 
var lower = myName.lowercaseString 
… Implicitly Unwrapped Optional 
// myNameがnilだったら?? 
→実行時エラー
困った 
Optional、、、どうなの? 
• まとめ 
• Optional、ちょっと面倒だけど、、 
• 高速化、実行時の安全のため、と思って… 
ソース 
ビルド 
アプリ実機で実行 
<Optionalの話:おわり>
教訓 
DelegateはProtocol 
• Delegateは、Protocolという同等の機能になる 
• 基本的にメソッドの実装が必要となるが、下記のよ 
うにすれば、optionalなメソッドも定義可能 
@objc protocol MyProtocol { 
optional func funcXXX() -> String 
}
教訓 
無理に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!
単語や演算子間の 
スペースが超重要! 
教訓 
• “=“ の前後にスペースを開けないとエラーになること 
があった! 
(最新版のXcode 6.0.1あたりの話)
教訓 
Xcodeは旧バージョンを残す 
• Xcodeをバージョンアップすると、Swiftも変わる。 
• Swiftの文法が変わってビルドできなくなる! 
(実際、何度かありました。。) 
• 1日程度は余裕を持って新バージョンを試しましょう
アップできなかった! 
• Xcode 6.1(の特定ビルド?) でビルドして申請し 
ようとしたら、アップできなかった。。 
詳細: 
http://labs.torques.jp/2014/10/24/3736/ 
「Xcode 6.1が怖い理由 « TORQUES LABS」 
ハマった
教訓 
スクリーンショット準備が大変 
• 画面サイズが増えた。 
• 多言語対応していると、、
おすすめ検索方法 
教訓 
• ググる時に期間指定をする!
株式会社トルクス 
facebook.com/torques.inc 
↑  
エンジニアの皆さんに有益な情報を流すよう 
努力しますので、 
「いいね!」してもらえると嬉しいです! 
お仕事、開発パートナーも募集中! 
(Oculus, Unity, Arduino, Raspberry Pi等、いろいろ準備中です!)

Mais conteúdo relacionado

Mais de Hiromichi Yamada

Project PLATEAU について調べたまとめ
Project PLATEAU について調べたまとめProject PLATEAU について調べたまとめ
Project PLATEAU について調べたまとめHiromichi Yamada
 
はじめての Magic Leap 1 コンテンツ開発
はじめての Magic Leap 1 コンテンツ開発はじめての Magic Leap 1 コンテンツ開発
はじめての Magic Leap 1 コンテンツ開発Hiromichi Yamada
 
Unityで作るオリジナルウェブカメラ
Unityで作るオリジナルウェブカメラUnityで作るオリジナルウェブカメラ
Unityで作るオリジナルウェブカメラHiromichi Yamada
 
SMCN #03 Oculus Quest と VRコンテンツを知ろう
SMCN #03 Oculus Quest と VRコンテンツを知ろうSMCN #03 Oculus Quest と VRコンテンツを知ろう
SMCN #03 Oculus Quest と VRコンテンツを知ろうHiromichi Yamada
 
UnityでつくるVRアプリ 〜VRの作法とVRTK〜
UnityでつくるVRアプリ 〜VRの作法とVRTK〜UnityでつくるVRアプリ 〜VRの作法とVRTK〜
UnityでつくるVRアプリ 〜VRの作法とVRTK〜Hiromichi Yamada
 
【地域おこしVR研究会】第1回勉強会「VR業界動向とコンテンツ制作入門」
【地域おこしVR研究会】第1回勉強会「VR業界動向とコンテンツ制作入門」【地域おこしVR研究会】第1回勉強会「VR業界動向とコンテンツ制作入門」
【地域おこしVR研究会】第1回勉強会「VR業界動向とコンテンツ制作入門」Hiromichi Yamada
 
子どもがOculusダメな理由を調べてみた
子どもがOculusダメな理由を調べてみた子どもがOculusダメな理由を調べてみた
子どもがOculusダメな理由を調べてみたHiromichi Yamada
 
Oculus 体験・勉強会「VRコンテンツ制作入門」 2015/05/13
Oculus 体験・勉強会「VRコンテンツ制作入門」 2015/05/13Oculus 体験・勉強会「VRコンテンツ制作入門」 2015/05/13
Oculus 体験・勉強会「VRコンテンツ制作入門」 2015/05/13Hiromichi Yamada
 
Oculus 体験・勉強会「VRコンテンツ制作入門」
Oculus 体験・勉強会「VRコンテンツ制作入門」Oculus 体験・勉強会「VRコンテンツ制作入門」
Oculus 体験・勉強会「VRコンテンツ制作入門」Hiromichi Yamada
 

Mais de Hiromichi Yamada (11)

Project PLATEAU について調べたまとめ
Project PLATEAU について調べたまとめProject PLATEAU について調べたまとめ
Project PLATEAU について調べたまとめ
 
はじめての Magic Leap 1 コンテンツ開発
はじめての Magic Leap 1 コンテンツ開発はじめての Magic Leap 1 コンテンツ開発
はじめての Magic Leap 1 コンテンツ開発
 
Unityで作るオリジナルウェブカメラ
Unityで作るオリジナルウェブカメラUnityで作るオリジナルウェブカメラ
Unityで作るオリジナルウェブカメラ
 
SMCN05 - AR! AR! AR!
SMCN05 - AR! AR! AR!SMCN05 - AR! AR! AR!
SMCN05 - AR! AR! AR!
 
SMCN #03 Oculus Quest と VRコンテンツを知ろう
SMCN #03 Oculus Quest と VRコンテンツを知ろうSMCN #03 Oculus Quest と VRコンテンツを知ろう
SMCN #03 Oculus Quest と VRコンテンツを知ろう
 
UnityでつくるVRアプリ 〜VRの作法とVRTK〜
UnityでつくるVRアプリ 〜VRの作法とVRTK〜UnityでつくるVRアプリ 〜VRの作法とVRTK〜
UnityでつくるVRアプリ 〜VRの作法とVRTK〜
 
【地域おこしVR研究会】第1回勉強会「VR業界動向とコンテンツ制作入門」
【地域おこしVR研究会】第1回勉強会「VR業界動向とコンテンツ制作入門」【地域おこしVR研究会】第1回勉強会「VR業界動向とコンテンツ制作入門」
【地域おこしVR研究会】第1回勉強会「VR業界動向とコンテンツ制作入門」
 
子どもがOculusダメな理由を調べてみた
子どもがOculusダメな理由を調べてみた子どもがOculusダメな理由を調べてみた
子どもがOculusダメな理由を調べてみた
 
Oculus 体験・勉強会「VRコンテンツ制作入門」 2015/05/13
Oculus 体験・勉強会「VRコンテンツ制作入門」 2015/05/13Oculus 体験・勉強会「VRコンテンツ制作入門」 2015/05/13
Oculus 体験・勉強会「VRコンテンツ制作入門」 2015/05/13
 
Oculus 体験・勉強会「VRコンテンツ制作入門」
Oculus 体験・勉強会「VRコンテンツ制作入門」Oculus 体験・勉強会「VRコンテンツ制作入門」
Oculus 体験・勉強会「VRコンテンツ制作入門」
 
Words
WordsWords
Words
 

Último

NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)NTT DATA Technology & Innovation
 
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。iPride Co., Ltd.
 
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...Toru Tamaki
 
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアルLoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアルCRI Japan, Inc.
 
新人研修 後半 2024/04/26の勉強会で発表されたものです。
新人研修 後半        2024/04/26の勉強会で発表されたものです。新人研修 後半        2024/04/26の勉強会で発表されたものです。
新人研修 後半 2024/04/26の勉強会で発表されたものです。iPride Co., Ltd.
 
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video UnderstandingToru Tamaki
 
Utilizing Ballerina for Cloud Native Integrations
Utilizing Ballerina for Cloud Native IntegrationsUtilizing Ballerina for Cloud Native Integrations
Utilizing Ballerina for Cloud Native IntegrationsWSO2
 
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptxsn679259
 
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。iPride Co., Ltd.
 
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
LoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイスLoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイス
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイスCRI Japan, Inc.
 
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)Hiroshi Tomioka
 
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Gamesatsushi061452
 

Último (12)

NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
 
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
 
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
 
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアルLoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
 
新人研修 後半 2024/04/26の勉強会で発表されたものです。
新人研修 後半        2024/04/26の勉強会で発表されたものです。新人研修 後半        2024/04/26の勉強会で発表されたものです。
新人研修 後半 2024/04/26の勉強会で発表されたものです。
 
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
 
Utilizing Ballerina for Cloud Native Integrations
Utilizing Ballerina for Cloud Native IntegrationsUtilizing Ballerina for Cloud Native Integrations
Utilizing Ballerina for Cloud Native Integrations
 
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
 
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
 
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
LoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイスLoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイス
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
 
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
 
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
 

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