SlideShare a Scribd company logo
1 of 72
Download to read offline
Swift LT
@Wantedly
2014-07-17 yohei sugigami
杉上 洋平 (スギガミ ヨウヘイ)
GitHub: @susieyy
先月JOINしたばかりの新米プログラマー
!
!
!
Wantedlyでは高いQiita力が求められる :)
Swiftで2位
・Swiftのアプリ開発でハマった	

 こと 10個	

!
・Xcode6とSwiftのアプリ開発で	

 踏んだ地雷たち8個
アジェンダ
Xcode6で新規のアプリを開発した時に気づいたこと
をまとめます。アプリの仕様は以下のとおり。	

!
- 開発言語はSwift	

- Cocoapodsで既存Objcのライブラリを利用	

- デプロイターゲットはiOS8以上	

- Storyboardを利用	

- AutolayoutとSizeClassesを利用
開発環境は以下のとおり。	

!
- Xcode6はBeta2, 3を利用	

- 検証実機はiOS8 Beta2, 3をインストールのiPhone5	

!
Beta2で開発していたら、Beta3が出ました \(^o^)/
Swiftのアプリ開発で
ハマったこと
以下の様なObjCメソッドにSwiftの
クロージャを渡す方法
@interface HogeFuga : NSObject	
+ (void) hogeUsingBlock:(id)bock;	
@end
ObjC id = Swift AnyObject
HogeFuga.hogeUsingBlock( { () -> () in	
println("Fuga")	
})
ERROR Type '() -> ()' does not
conform to protocol 'AnyObject'
var closures: AnyObject = { () in	
println("Fuga")	
}
ERROR Type '() -> ()' does not
conform to protocol 'AnyObject'
typedef void (^Block)();	
!
@interface HogeFuga (Wrapper)	
+ (void) hogeUsingBlockWrapper:(Block)block;	
@end	
!
@implementation HogeFuga (Wrapper)	
+ (void) hogeUsingBlockWrapper:(Block)block;	
{	
[HogeFuga hogeUsingBlock:block];	
}	
@end
ObjCで型を明示したブロックを	

持つメソッドでラップする
NSObject#descriptionをオーバーラ
イドする
②
class Hoge: NSObject {	
var name: String?	
var note: String?	
	
override func description() -> String {	
		 return "Name = (self.name), 	
			 	 	 	 	 	 Note = (self.note)"	
}	
}
ERROR Method does not override
any method from its superclass
class Hoge: NSObject {	
var name: String?	
var note: String?	
	
override var description: String! {	
get {	
return "Name = (self.name), 	
			 	 	 	 	 	 	 	 Note = (self.note)"	
}	
}	
}	
プロパティのオーバーライドする
ObjCのenum値をSwift記法で記載
する方法がわからない
③
Swift	
UIViewAutoresizing.FlexibleLeftMargin
typedef NS_OPTIONS(NSUInteger, UIViewAutoresizing) {	
UIViewAutoresizingNone = 0,	
UIViewAutoresizingFlexibleLeftMargin = 1 << 0,	
…	
}
ObjC	
UIViewAutoresizingFlexibleLeftMargin
わかりやすい例
Swift	
UIViewAnimationOptions.LayoutSubviews
typedef NS_OPTIONS(NSUInteger, UIViewAnimationOptions) {	
UIViewAnimationOptionLayoutSubviews = 1 << 0,	
UIViewAnimationOptionAllowUserInteraction = 1 << 1,	
…	
}
ObjC	
UIViewAnimationOptionLayoutSubviews
許容範囲な例
Swift	
HogeStyle.FugaValue1
typedef NS_ENUM(NSInteger, HogeStyle) {	
HogeFugaDefault,	
HogeFugaValue1,	
HogeFugaValue2,	
HogeFugaSubtitle	
};
ObjC	
HogeFugaValue1
複雑な例(Prefixが一致していない)
enum型のメソッド引数や変数に
enumで定義された定数以外を設定
するとエラーになる
④
typedef NS_ENUM(NSInteger, UIViewContentMode) {	
UIViewContentModeScaleToFill,	
...	
}	
!
self.view.contentMode = 0	
!
// => ERROR Cannot convert the expression's type
'()' to type 'UIViewContentMode'	
Swiftの型は厳しいですね
スカラー型のキャストはコンバー
ジョンを使う
⑤
let i: Int = Int(1.0)	
let n: NSInteger = NSInteger(1.0)	
!
let f: Float = Float(100)	
let d: Double = Double(100)	
let g: CGFloat = CGFloat(100)
Swiftではスカラー型のキャストはない	

代わりにコンバージョンを利用
let index: NSInteger = 1	
let width: CGFloat = 100	
let r = width * (CGFloat)index	
!
// => ERROR Consecutive statements on
a line must be separated by ';'
ObjCライクなキャストはできない
let someObjects: [AnyObject] = [	
Movie(name: "2001: A Space", director: "Stan"),	
Movie(name: "Moon", director: "Duncan Jones"),	
Movie(name: "Alien", director: "Ridley Scott")	
]	
!
for object in someObjects {	
let movie = object as Movie // Type Casting !	
println("Movie: '(movie.name)', 	
	 dir. (movie.director)")	
}	
補足

オブジェクト型はキャスト可能
for movie in someObjects as [Movie] {	
println("Movie: '(movie.name)', 	
			 	 	 	 	 	 	 dir. (movie.director)")	
}
配列をキャストするとコンパクトに書ける
CGFloatとFloatまたはDoubleの演算
⑥
import CoreGraphics	
!
typealias CGFloat = Float
CoreGraphicsにはCGFloatはFloatとエイリア
スされている
let index: NSInteger = 1	
let width: CGFloat = 100	
let r1 = width * Float(index)	
!
// => ERROR Could not find an overload
for '*' that accepts the supplied
arguments
CGFloatとFloatの演算	

一見正しく動作しそうだがエラーになる
なぜなら	

iPhone5s(arm64)をターゲットにビ
ルドしているから
このときCGFloatはSwiftのDouble
にエイリアスされる
let index: NSInteger = 1	
let width: CGFloat = 100	
let r2 = width * Double(index)	
// => OK
iPhone5s(arm64)の場合はDoubleだとコン
パイルできる
let index: NSInteger = 1	
let width: CGFloat = 100	
let r = width * CGFloat(index)	
// => OK
CGFloatとの演算はCGFloatにコンバー
ジョンしましょう
ObjCのNSIntegerとSwiftのIntの演
算
⑦
typealias NSInteger = Int	
!
!
let i: Int = 1	
let n: NSInteger = 1	
let x: CGFloat = 3	
let y: Float = 3	
let w = i + Int(x) + Int(y) // => OK	
let q = n + Int(x) + Int(y) // => OK	
!
if n == i {	
println("HERE!") // => OK	
}
let u: NSUInteger = 1	
!
// ERROR => Use of undeclared type
'NSUInteger'; did you mean to use
'Int'?
NSUInteger は利用できません
クロージャ型プロパティのオプ
ショナルな書き方
⑧
class Fuga {	
var completion: ( () -> () )?	
}
丸括弧で括ります
ObjCのClass型をパラメータにとる
メソッドにSwiftのClassを渡す方法
⑨
@interface RKObjectMapping : RKMapping {	
+(instancetype)mappingForClass:(Class)objectClass	
}	
!
!
@implementation RKObjectMappingOp…	
{	
return [mapping.objectClass new];	
}
渡したClass型がObjC側でnewされるケース	

(例: Restkit)
Swiftからどういう clazz を渡せばいいのか
class HogeModel: NSObject {	
}	
!
!
var clazz = ???

let mapping: RKObjectMapping =
RKObjectMapping(forClass: clazz)
var clazz: AnyClass =
NSClassFromString(“WTDHogeModel”)	
!
// ERROR => EXC_BAD_INSTRUNCTION
失敗①	

NSClassFromStringで渡す
var clazz: AnyClass =
object_getClass(WTDHogeModel())	
!
!
// newでERROR	
[mapping.objectClass new];
失敗②	

object_getClassで渡す
var clazz: NSObject.Type = WTDHogeModel.self

let mapping: RKObjectMapping =
RKObjectMapping(forClass: clazz) 	
!
!
// => OK
結論	

NSObject.Typeを渡す
シングルトンパターンを実装する
3つの方法
⑩
!
!
遅延初期化(lazy initialization)とスレッド
セーフ(thread safety)が考慮された実装
class Singleton {	
class var sharedInstance : Singleton {	
struct Static {	
static var onceToken : dispatch_once_t = 0	
static var instance : Singleton? = nil	
}	
dispatch_once(&Static.onceToken) {	
Static.instance = Singleton()	
}	
return Static.instance!	
}	
}
dispatch_onceで定義
ObjCと同様の実装方法

毎回これを書くにのは大変
let _SingletonSharedInstance = Singleton()	
!
class Singleton {	
class var sharedInstance : Singleton {	
return _SingletonSharedInstance	
}	
}
グローバル定数で定義
今後Swiftの言語仕様が変更され局所的グ
ローバル変数が定義できるようになれば、
この実装方法がもっともシンプル
class Singleton {	
class var sharedInstance : Singleton {	
struct Static {	
static let instance : Singleton = Singleton()	
}	
return Static.instance	
}	
}
structのstatic定数で定義 (推奨)
Swiftのclassはstatic定数を利用できないの
で、structでネストしてstatic定数を保持
Xcode6とSwift&iOS8
のアプリ開発で踏ん
だ地雷たち
コンパイルエラー	

XXXHeaderファイル has been
modified since the precompiled header
①
fatal error: file ‘…/UIKit.framework/
Headers /UIVisualEffectView.h’ has
been modified since the precompiled
header …
対応方法	

毎回なぜかなおる対応方法がまちまち	

!
- Xcode6再起動	

- ビルドをクリーンする	

- DerivedDataを削除する	

- OSXを再起動する	

- Xcode6を入れなおす orz
②
IBOutletのStoryboardとのコネク
ションありが表示されない場合が
ある
コンパイル後のアプリの挙動は正しく接続
されている状態で動作していました
③
Storyboardのファイルを開いても
XMLで表示される
XML…
明示的に開きましょう
④
ソースコードハイライトと入力補
完が効かなくなる
たまに復活もしますw
⑤
シミュレーターでアプリを起動し
ようとするとエラーになる
Xcode6とシミュレーターを再起動
したらなおりました。
⑥
Xcode5とXcode6のシミュレーター
で同時にアプリを起動できない
どちらかのシミュレーターを終了
しましょう
⑦
switchと書くとXcodeがフリーズす
る
Beta3ではまだ出ていないです
⑧
誤ってプロジェクトをXcode5で開
いてStroyboardを開くとXcode6で
Stroyboardがおかしくなっている
Xcode5で誤って開いたら何やらエラーが
ファイルが破壊されました。	

git reset などでファイルを戻しましょう。
Finderからプロジェクトファイルを
ダブルクリックして開くとXcode5
で開かれることもあります。
Xcode5を起動すると、Xcode6で作
業していたプロジェクトを勝手に
開く場合があります。
予防策	

!
1. gitなどで細かくコミットしてロールバックできる
ように	

!
2. Xcode6でプロジェクトを開いたらストーリボード
を最終編集画面にして閉じない	

!
3. Xcode6を終了するときはプロジェクトを閉じてか
ら終了する	

!
4. Xcode5を捨てるw
iOS,Android
Rails エンジニア
募集中
hiring@wantedly.com
興味がある方はこちらからご連絡ください
新しい技術にどんどん挑戦したい
モバイルエンジニア・ウォンテッド!!
こちらからでもOKです
おわり

More Related Content

What's hot

An Internal of LINQ to Objects
An Internal of LINQ to ObjectsAn Internal of LINQ to Objects
An Internal of LINQ to ObjectsYoshifumi Kawai
 
Groovy Shell Scripting 2015
Groovy Shell Scripting 2015Groovy Shell Scripting 2015
Groovy Shell Scripting 2015Uehara Junji
 
入門ClojureScript
入門ClojureScript入門ClojureScript
入門ClojureScriptsohta
 
Markup Template Engine introduced Groovy 2.3
Markup Template Engine introduced Groovy 2.3Markup Template Engine introduced Groovy 2.3
Markup Template Engine introduced Groovy 2.3Uehara Junji
 
Groovy Bootcamp 2015 by JGGUG
Groovy Bootcamp 2015 by JGGUGGroovy Bootcamp 2015 by JGGUG
Groovy Bootcamp 2015 by JGGUGUehara Junji
 
Observable Everywhere - Rxの原則とUniRxにみるデータソースの見つけ方
Observable Everywhere  - Rxの原則とUniRxにみるデータソースの見つけ方Observable Everywhere  - Rxの原則とUniRxにみるデータソースの見つけ方
Observable Everywhere - Rxの原則とUniRxにみるデータソースの見つけ方Yoshifumi Kawai
 
Hello, C++ + JavaScript World! - Boost.勉強会 #11 東京
Hello, C++ + JavaScript World! - Boost.勉強会 #11 東京Hello, C++ + JavaScript World! - Boost.勉強会 #11 東京
Hello, C++ + JavaScript World! - Boost.勉強会 #11 東京hecomi
 
これからのJavaScriptの話
これからのJavaScriptの話これからのJavaScriptの話
これからのJavaScriptの話Shogo Sensui
 
Rxに入門しようとしている
Rxに入門しようとしているRxに入門しようとしている
Rxに入門しようとしているonotchi_
 
New features of Groovy 2.0 and 2.1
New features of Groovy 2.0 and 2.1New features of Groovy 2.0 and 2.1
New features of Groovy 2.0 and 2.1Uehara Junji
 
Read Groovy Compile process(Groovy Benkyoukai 2013)
Read Groovy Compile process(Groovy Benkyoukai 2013)Read Groovy Compile process(Groovy Benkyoukai 2013)
Read Groovy Compile process(Groovy Benkyoukai 2013)Uehara Junji
 
JavaScriptCore.framework の普通な使い方 #cocoa_kansai
JavaScriptCore.framework の普通な使い方 #cocoa_kansaiJavaScriptCore.framework の普通な使い方 #cocoa_kansai
JavaScriptCore.framework の普通な使い方 #cocoa_kansaiTomohiro Kumagai
 
基礎からのCode Contracts
基礎からのCode Contracts基礎からのCode Contracts
基礎からのCode ContractsYoshifumi Kawai
 
ジェネリック関数の呼び出され方 #cocoa_kansai
ジェネリック関数の呼び出され方 #cocoa_kansaiジェネリック関数の呼び出され方 #cocoa_kansai
ジェネリック関数の呼び出され方 #cocoa_kansaiTomohiro Kumagai
 
Introduce Groovy 2.3 trait
Introduce Groovy 2.3 trait Introduce Groovy 2.3 trait
Introduce Groovy 2.3 trait Uehara Junji
 
coma Creators session vol.2
coma Creators session vol.2coma Creators session vol.2
coma Creators session vol.2Atsushi Tadokoro
 
groovy 2.1.0 20130118
groovy 2.1.0 20130118groovy 2.1.0 20130118
groovy 2.1.0 20130118Uehara Junji
 

What's hot (20)

An Internal of LINQ to Objects
An Internal of LINQ to ObjectsAn Internal of LINQ to Objects
An Internal of LINQ to Objects
 
Groovy Shell Scripting 2015
Groovy Shell Scripting 2015Groovy Shell Scripting 2015
Groovy Shell Scripting 2015
 
入門ClojureScript
入門ClojureScript入門ClojureScript
入門ClojureScript
 
Markup Template Engine introduced Groovy 2.3
Markup Template Engine introduced Groovy 2.3Markup Template Engine introduced Groovy 2.3
Markup Template Engine introduced Groovy 2.3
 
Groovy Bootcamp 2015 by JGGUG
Groovy Bootcamp 2015 by JGGUGGroovy Bootcamp 2015 by JGGUG
Groovy Bootcamp 2015 by JGGUG
 
覚醒!JavaScript
覚醒!JavaScript覚醒!JavaScript
覚醒!JavaScript
 
Observable Everywhere - Rxの原則とUniRxにみるデータソースの見つけ方
Observable Everywhere  - Rxの原則とUniRxにみるデータソースの見つけ方Observable Everywhere  - Rxの原則とUniRxにみるデータソースの見つけ方
Observable Everywhere - Rxの原則とUniRxにみるデータソースの見つけ方
 
Hello, C++ + JavaScript World! - Boost.勉強会 #11 東京
Hello, C++ + JavaScript World! - Boost.勉強会 #11 東京Hello, C++ + JavaScript World! - Boost.勉強会 #11 東京
Hello, C++ + JavaScript World! - Boost.勉強会 #11 東京
 
これからのJavaScriptの話
これからのJavaScriptの話これからのJavaScriptの話
これからのJavaScriptの話
 
Study Swift
Study Swift Study Swift
Study Swift
 
Rxに入門しようとしている
Rxに入門しようとしているRxに入門しようとしている
Rxに入門しようとしている
 
New features of Groovy 2.0 and 2.1
New features of Groovy 2.0 and 2.1New features of Groovy 2.0 and 2.1
New features of Groovy 2.0 and 2.1
 
Read Groovy Compile process(Groovy Benkyoukai 2013)
Read Groovy Compile process(Groovy Benkyoukai 2013)Read Groovy Compile process(Groovy Benkyoukai 2013)
Read Groovy Compile process(Groovy Benkyoukai 2013)
 
JavaScriptCore.framework の普通な使い方 #cocoa_kansai
JavaScriptCore.framework の普通な使い方 #cocoa_kansaiJavaScriptCore.framework の普通な使い方 #cocoa_kansai
JavaScriptCore.framework の普通な使い方 #cocoa_kansai
 
基礎からのCode Contracts
基礎からのCode Contracts基礎からのCode Contracts
基礎からのCode Contracts
 
ジェネリック関数の呼び出され方 #cocoa_kansai
ジェネリック関数の呼び出され方 #cocoa_kansaiジェネリック関数の呼び出され方 #cocoa_kansai
ジェネリック関数の呼び出され方 #cocoa_kansai
 
Rubyize
RubyizeRubyize
Rubyize
 
Introduce Groovy 2.3 trait
Introduce Groovy 2.3 trait Introduce Groovy 2.3 trait
Introduce Groovy 2.3 trait
 
coma Creators session vol.2
coma Creators session vol.2coma Creators session vol.2
coma Creators session vol.2
 
groovy 2.1.0 20130118
groovy 2.1.0 20130118groovy 2.1.0 20130118
groovy 2.1.0 20130118
 

Viewers also liked

Swift初心者がSpriteKitで一ヶ月でゲームを作った話
Swift初心者がSpriteKitで一ヶ月でゲームを作った話Swift初心者がSpriteKitで一ヶ月でゲームを作った話
Swift初心者がSpriteKitで一ヶ月でゲームを作った話Masaaki Kakimoto
 
会津Swift開発合宿振り返り
会津Swift開発合宿振り返り会津Swift開発合宿振り返り
会津Swift開発合宿振り返りKenji Tanaka
 
開発技術対決! Dots.カンファレンス エキシビジョン iOS代表
開発技術対決! Dots.カンファレンス エキシビジョン iOS代表開発技術対決! Dots.カンファレンス エキシビジョン iOS代表
開発技術対決! Dots.カンファレンス エキシビジョン iOS代表yohei sugigami
 
Ca shape layerの塗りつぶしルールでちょっとリッチな描画をしよう
Ca shape layerの塗りつぶしルールでちょっとリッチな描画をしようCa shape layerの塗りつぶしルールでちょっとリッチな描画をしよう
Ca shape layerの塗りつぶしルールでちょっとリッチな描画をしようKenji Tanaka
 
ReactNativeを語る勉強会
ReactNativeを語る勉強会ReactNativeを語る勉強会
ReactNativeを語る勉強会yohei sugigami
 
楽しいSwift!クラスと構造体を知る:)
楽しいSwift!クラスと構造体を知る:)楽しいSwift!クラスと構造体を知る:)
楽しいSwift!クラスと構造体を知る:)Kanako Kobayashi
 
SwiftでSioriを開発した体験記
SwiftでSioriを開発した体験記SwiftでSioriを開発した体験記
SwiftでSioriを開発した体験記yohei sugigami
 
iOSアプリケーションアーキテクチャ選定の鍵を探す
iOSアプリケーションアーキテクチャ選定の鍵を探すiOSアプリケーションアーキテクチャ選定の鍵を探す
iOSアプリケーションアーキテクチャ選定の鍵を探すKenji Tanaka
 
描画とビジネスをクリーンに分ける(公開用)
描画とビジネスをクリーンに分ける(公開用)描画とビジネスをクリーンに分ける(公開用)
描画とビジネスをクリーンに分ける(公開用)Kenji Tanaka
 

Viewers also liked (10)

Swiftおさらい
SwiftおさらいSwiftおさらい
Swiftおさらい
 
Swift初心者がSpriteKitで一ヶ月でゲームを作った話
Swift初心者がSpriteKitで一ヶ月でゲームを作った話Swift初心者がSpriteKitで一ヶ月でゲームを作った話
Swift初心者がSpriteKitで一ヶ月でゲームを作った話
 
会津Swift開発合宿振り返り
会津Swift開発合宿振り返り会津Swift開発合宿振り返り
会津Swift開発合宿振り返り
 
開発技術対決! Dots.カンファレンス エキシビジョン iOS代表
開発技術対決! Dots.カンファレンス エキシビジョン iOS代表開発技術対決! Dots.カンファレンス エキシビジョン iOS代表
開発技術対決! Dots.カンファレンス エキシビジョン iOS代表
 
Ca shape layerの塗りつぶしルールでちょっとリッチな描画をしよう
Ca shape layerの塗りつぶしルールでちょっとリッチな描画をしようCa shape layerの塗りつぶしルールでちょっとリッチな描画をしよう
Ca shape layerの塗りつぶしルールでちょっとリッチな描画をしよう
 
ReactNativeを語る勉強会
ReactNativeを語る勉強会ReactNativeを語る勉強会
ReactNativeを語る勉強会
 
楽しいSwift!クラスと構造体を知る:)
楽しいSwift!クラスと構造体を知る:)楽しいSwift!クラスと構造体を知る:)
楽しいSwift!クラスと構造体を知る:)
 
SwiftでSioriを開発した体験記
SwiftでSioriを開発した体験記SwiftでSioriを開発した体験記
SwiftでSioriを開発した体験記
 
iOSアプリケーションアーキテクチャ選定の鍵を探す
iOSアプリケーションアーキテクチャ選定の鍵を探すiOSアプリケーションアーキテクチャ選定の鍵を探す
iOSアプリケーションアーキテクチャ選定の鍵を探す
 
描画とビジネスをクリーンに分ける(公開用)
描画とビジネスをクリーンに分ける(公開用)描画とビジネスをクリーンに分ける(公開用)
描画とビジネスをクリーンに分ける(公開用)
 

Similar to Swiftのアプリ開発でハマったこと

これからはじめる SwiftPlayground入門
これからはじめる SwiftPlayground入門これからはじめる SwiftPlayground入門
これからはじめる SwiftPlayground入門Hiramatsu Ryosuke
 
GroovyなAndroidテスト #atest_hack
GroovyなAndroidテスト #atest_hackGroovyなAndroidテスト #atest_hack
GroovyなAndroidテスト #atest_hackTakahiro Yoshimura
 
var RAC3 = ReactiveCocoa + Swift
var RAC3 = ReactiveCocoa + Swiftvar RAC3 = ReactiveCocoa + Swift
var RAC3 = ReactiveCocoa + SwiftSyo Ikeda
 
Android上での3D(OpenGL)描画の基礎とNDKによる実践的高速化手法
Android上での3D(OpenGL)描画の基礎とNDKによる実践的高速化手法Android上での3D(OpenGL)描画の基礎とNDKによる実践的高速化手法
Android上での3D(OpenGL)描画の基礎とNDKによる実践的高速化手法Hiroshi Yoshida
 
Swift 構造体の時代 #yidev
Swift 構造体の時代 #yidevSwift 構造体の時代 #yidev
Swift 構造体の時代 #yidevTomohiro Kumagai
 
Swift を振り返ってみよう #cswift
Swift を振り返ってみよう #cswiftSwift を振り返ってみよう #cswift
Swift を振り返ってみよう #cswiftTomohiro Kumagai
 
ようこそ! Swift Playgroundsへ
ようこそ! Swift Playgroundsへようこそ! Swift Playgroundsへ
ようこそ! Swift PlaygroundsへKinkumaDesign
 
ちゃんとWeb会議スライド『Coffee script』
ちゃんとWeb会議スライド『Coffee script』ちゃんとWeb会議スライド『Coffee script』
ちゃんとWeb会議スライド『Coffee script』H2O Space. Co., Ltd.
 
ScalaでAndroidアプリ開発
ScalaでAndroidアプリ開発ScalaでAndroidアプリ開発
ScalaでAndroidアプリ開発papamitra
 
Unity C#3からC#6に向けて
Unity C#3からC#6に向けてUnity C#3からC#6に向けて
Unity C#3からC#6に向けてonotchi_
 
TypeScript と Visual Studio Code
TypeScript と Visual Studio CodeTypeScript と Visual Studio Code
TypeScript と Visual Studio CodeAkira Inoue
 
Node.jsとAWS入門(Elastic Beanstalk & AWS SDK for Node.js)
Node.jsとAWS入門(Elastic Beanstalk & AWS SDK for Node.js)Node.jsとAWS入門(Elastic Beanstalk & AWS SDK for Node.js)
Node.jsとAWS入門(Elastic Beanstalk & AWS SDK for Node.js)崇之 清水
 
TypeScript ファーストステップ (Rev.2) ~ Any browser. Any host. Any OS. Open Source. ~
TypeScript ファーストステップ (Rev.2) ~ Any browser. Any host. Any OS. Open Source. ~TypeScript ファーストステップ (Rev.2) ~ Any browser. Any host. Any OS. Open Source. ~
TypeScript ファーストステップ (Rev.2) ~ Any browser. Any host. Any OS. Open Source. ~Akira Inoue
 
Xcode 6の新機能
Xcode 6の新機能Xcode 6の新機能
Xcode 6の新機能Shingo Sato
 
Cocos2d x-sprite3d
Cocos2d x-sprite3dCocos2d x-sprite3d
Cocos2d x-sprite3daktsk
 
Wolcome to swift
Wolcome to swiftWolcome to swift
Wolcome to swiftKyohei Ito
 
関東GPGPU勉強会 LLVM meets GPU
関東GPGPU勉強会 LLVM meets GPU関東GPGPU勉強会 LLVM meets GPU
関東GPGPU勉強会 LLVM meets GPUTakuro Iizuka
 
13016 n分で作るtype scriptでnodejs
13016 n分で作るtype scriptでnodejs13016 n分で作るtype scriptでnodejs
13016 n分で作るtype scriptでnodejsTakayoshi Tanaka
 

Similar to Swiftのアプリ開発でハマったこと (20)

これからはじめる SwiftPlayground入門
これからはじめる SwiftPlayground入門これからはじめる SwiftPlayground入門
これからはじめる SwiftPlayground入門
 
GroovyなAndroidテスト #atest_hack
GroovyなAndroidテスト #atest_hackGroovyなAndroidテスト #atest_hack
GroovyなAndroidテスト #atest_hack
 
Open modeler
Open modelerOpen modeler
Open modeler
 
var RAC3 = ReactiveCocoa + Swift
var RAC3 = ReactiveCocoa + Swiftvar RAC3 = ReactiveCocoa + Swift
var RAC3 = ReactiveCocoa + Swift
 
Android上での3D(OpenGL)描画の基礎とNDKによる実践的高速化手法
Android上での3D(OpenGL)描画の基礎とNDKによる実践的高速化手法Android上での3D(OpenGL)描画の基礎とNDKによる実践的高速化手法
Android上での3D(OpenGL)描画の基礎とNDKによる実践的高速化手法
 
Swift 構造体の時代 #yidev
Swift 構造体の時代 #yidevSwift 構造体の時代 #yidev
Swift 構造体の時代 #yidev
 
Swift を振り返ってみよう #cswift
Swift を振り返ってみよう #cswiftSwift を振り返ってみよう #cswift
Swift を振り返ってみよう #cswift
 
ようこそ! Swift Playgroundsへ
ようこそ! Swift Playgroundsへようこそ! Swift Playgroundsへ
ようこそ! Swift Playgroundsへ
 
ちゃんとWeb会議スライド『Coffee script』
ちゃんとWeb会議スライド『Coffee script』ちゃんとWeb会議スライド『Coffee script』
ちゃんとWeb会議スライド『Coffee script』
 
ScalaでAndroidアプリ開発
ScalaでAndroidアプリ開発ScalaでAndroidアプリ開発
ScalaでAndroidアプリ開発
 
Unity C#3からC#6に向けて
Unity C#3からC#6に向けてUnity C#3からC#6に向けて
Unity C#3からC#6に向けて
 
TypeScript と Visual Studio Code
TypeScript と Visual Studio CodeTypeScript と Visual Studio Code
TypeScript と Visual Studio Code
 
Node.jsとAWS入門(Elastic Beanstalk & AWS SDK for Node.js)
Node.jsとAWS入門(Elastic Beanstalk & AWS SDK for Node.js)Node.jsとAWS入門(Elastic Beanstalk & AWS SDK for Node.js)
Node.jsとAWS入門(Elastic Beanstalk & AWS SDK for Node.js)
 
TypeScript ファーストステップ (Rev.2) ~ Any browser. Any host. Any OS. Open Source. ~
TypeScript ファーストステップ (Rev.2) ~ Any browser. Any host. Any OS. Open Source. ~TypeScript ファーストステップ (Rev.2) ~ Any browser. Any host. Any OS. Open Source. ~
TypeScript ファーストステップ (Rev.2) ~ Any browser. Any host. Any OS. Open Source. ~
 
Swift
SwiftSwift
Swift
 
Xcode 6の新機能
Xcode 6の新機能Xcode 6の新機能
Xcode 6の新機能
 
Cocos2d x-sprite3d
Cocos2d x-sprite3dCocos2d x-sprite3d
Cocos2d x-sprite3d
 
Wolcome to swift
Wolcome to swiftWolcome to swift
Wolcome to swift
 
関東GPGPU勉強会 LLVM meets GPU
関東GPGPU勉強会 LLVM meets GPU関東GPGPU勉強会 LLVM meets GPU
関東GPGPU勉強会 LLVM meets GPU
 
13016 n分で作るtype scriptでnodejs
13016 n分で作るtype scriptでnodejs13016 n分で作るtype scriptでnodejs
13016 n分で作るtype scriptでnodejs
 

Recently uploaded

IoT in the era of generative AI, Thanks IoT ALGYAN.pptx
IoT in the era of generative AI, Thanks IoT ALGYAN.pptxIoT in the era of generative AI, Thanks IoT ALGYAN.pptx
IoT in the era of generative AI, Thanks IoT ALGYAN.pptxAtomu Hidaka
 
PHP-Conference-Odawara-2024-04-000000000
PHP-Conference-Odawara-2024-04-000000000PHP-Conference-Odawara-2024-04-000000000
PHP-Conference-Odawara-2024-04-000000000Shota Ito
 
Postman LT Fukuoka_Quick Prototype_By Daniel
Postman LT Fukuoka_Quick Prototype_By DanielPostman LT Fukuoka_Quick Prototype_By Daniel
Postman LT Fukuoka_Quick Prototype_By Danieldanielhu54
 
20240412_HCCJP での Windows Server 2025 Active Directory
20240412_HCCJP での Windows Server 2025 Active Directory20240412_HCCJP での Windows Server 2025 Active Directory
20240412_HCCJP での Windows Server 2025 Active Directoryosamut
 
Amazon SES を勉強してみる その12024/04/12の勉強会で発表されたものです。
Amazon SES を勉強してみる その12024/04/12の勉強会で発表されたものです。Amazon SES を勉強してみる その12024/04/12の勉強会で発表されたものです。
Amazon SES を勉強してみる その12024/04/12の勉強会で発表されたものです。iPride Co., Ltd.
 
スマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システムスマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システムsugiuralab
 
UPWARD_share_company_information_20240415.pdf
UPWARD_share_company_information_20240415.pdfUPWARD_share_company_information_20240415.pdf
UPWARD_share_company_information_20240415.pdffurutsuka
 
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略Ryo Sasaki
 
新人研修のまとめ 2024/04/12の勉強会で発表されたものです。
新人研修のまとめ       2024/04/12の勉強会で発表されたものです。新人研修のまとめ       2024/04/12の勉強会で発表されたものです。
新人研修のまとめ 2024/04/12の勉強会で発表されたものです。iPride Co., Ltd.
 

Recently uploaded (9)

IoT in the era of generative AI, Thanks IoT ALGYAN.pptx
IoT in the era of generative AI, Thanks IoT ALGYAN.pptxIoT in the era of generative AI, Thanks IoT ALGYAN.pptx
IoT in the era of generative AI, Thanks IoT ALGYAN.pptx
 
PHP-Conference-Odawara-2024-04-000000000
PHP-Conference-Odawara-2024-04-000000000PHP-Conference-Odawara-2024-04-000000000
PHP-Conference-Odawara-2024-04-000000000
 
Postman LT Fukuoka_Quick Prototype_By Daniel
Postman LT Fukuoka_Quick Prototype_By DanielPostman LT Fukuoka_Quick Prototype_By Daniel
Postman LT Fukuoka_Quick Prototype_By Daniel
 
20240412_HCCJP での Windows Server 2025 Active Directory
20240412_HCCJP での Windows Server 2025 Active Directory20240412_HCCJP での Windows Server 2025 Active Directory
20240412_HCCJP での Windows Server 2025 Active Directory
 
Amazon SES を勉強してみる その12024/04/12の勉強会で発表されたものです。
Amazon SES を勉強してみる その12024/04/12の勉強会で発表されたものです。Amazon SES を勉強してみる その12024/04/12の勉強会で発表されたものです。
Amazon SES を勉強してみる その12024/04/12の勉強会で発表されたものです。
 
スマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システムスマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システム
 
UPWARD_share_company_information_20240415.pdf
UPWARD_share_company_information_20240415.pdfUPWARD_share_company_information_20240415.pdf
UPWARD_share_company_information_20240415.pdf
 
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
 
新人研修のまとめ 2024/04/12の勉強会で発表されたものです。
新人研修のまとめ       2024/04/12の勉強会で発表されたものです。新人研修のまとめ       2024/04/12の勉強会で発表されたものです。
新人研修のまとめ 2024/04/12の勉強会で発表されたものです。
 

Swiftのアプリ開発でハマったこと