テスト用のターゲットを作成する必要があります。 ユニットテストを有効にした場合は、MyApplication_Testsという名前のターゲットが既に存在しているかもしれません。 その場合に、もしそのターゲットをユニットテスト用に使用しないのであれば、そのターゲットをKIF用に使用しても構いません。 それ以外の場合は、以下の手順で新規にターゲットを作成してください。
- Xcode上でプロジェクトやターゲット選択欄から、ターゲットの追加を押す
【やりたいこと】
NSHTTPURLResponse *httpurlResponse = [[NSHTTPURLResponse alloc] initWithURL:[NSURL URLWithString:@"/hoge/"] | |
statusCode:200 | |
HTTPVersion:nil | |
headerFields:@{}]; | |
RKResponseMapperOperation *responseMapperOperation = [[RKResponseMapperOperation alloc] initWithRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:@"/hoge/"]] | |
response:httpurlResponse | |
data:[NSData new] | |
responseDescriptors:@[ | |
[RKResponseDescriptor responseDescriptorWithMapping:responseMapping | |
extension String { | |
var lastPathComponent: String { | |
get { | |
return (self as NSString).lastPathComponent | |
} | |
} | |
var pathExtension: String { | |
iOS9からApp Transport Security(ATS)が追加されました。 ATSとは安全なネットワーク接続を実現するための機能であり、Appleの要件を満たしていない場合は接続失敗という扱いになります。
対象となるのは、自社内サーバ、WebView経由、サードパーティライブラリ(SNS、広告、分析など)だと思います。 ATS自体を無効にするのはあまり良いやり方ではないので、これらのドメインをATSの例外に設定するのが一般的なやり方だと思います。
設定方法はInfo.plist
に指定の情報をセットするだけです。 しかし、プロジェクトのTarget
が多かったりConfiguration
によって設定を分けたい場合には、Info.plist
を個別に用意して管理する必要がありますが、無駄にInfo.plist
ファイルが増えるので良い方法ではないと思います。
最近AppleがProtocol Buffersの公式プラグインをGitHubに公開して話題になったので、実際に使ってみました。APIの通信が速くなったり、型安全に通信処理を書ける など、メリットが多いと感じたので簡単に紹介します。
他の事例だと、iOSオールスターズ2で発表された「これから始めるProtocol Buffers導入」が非常に参考になると思うので併せて読んでみてください。
この記事ではProtocol Buffersの概要について書いています。別途こちらの記事で使い方について サンプルを使って説明している ので、併せて読んでみてください。
この記事では、Protocol BuffersをSwiftでどう使うかサンプルアプリを使って説明します。Protocol Buffersの詳細はこちらの記事を先に読むと大体のイメージが掴めると思います。個人的には Protocol Buffersのメリットは型安全に書けて高速な通信が実現する ことだと思います。
今回のサンプルアプリは、クライアント側はAPIKit、サーバ側はKituraで 通信処理を実装します。サンプルアプリはGitHubで公開しているので、こちらからダウンロードして試してみてください。
また、URLSession
で実装したサンプルアプリもこちらに用意しました。URLSession
だけでも楽に実装できるので、こちらも参考にしてみてください。
import UIKit | |
protocol StoryboardInstantiable { | |
static var storyboardName: String { get } | |
static var storyboardIdentifier: String { get } | |
} | |
extension StoryboardInstantiable where Self: UIViewController { | |
static var storyboardName: String { return String(describing: self) } | |
static var storyboardIdentifier: String { return String(describing: self) } |
import Foundation | |
protocol UserDefaultsStorable { | |
associatedtype UserDefaultsKey: RawRepresentable | |
static func userDefaultsValue(forKey key: UserDefaultsKey) -> Bool? | |
static func userDefaultsValue(forKey key: UserDefaultsKey) -> Int? | |
static func userDefaultsValue(forKey key: UserDefaultsKey) -> Int64? | |
static func userDefaultsValue(forKey key: UserDefaultsKey) -> Double? | |
static func userDefaultsValue(forKey key: UserDefaultsKey) -> String? |
import UIKit | |
extension UITableView { | |
func registerNib<T: UITableViewCell>(forCellType type: T.Type) { | |
let name = String(describing: type) | |
let nib = UINib(nibName: name, bundle: nil) | |
register(nib, forCellReuseIdentifier: name) | |
} | |
func registerNib<T: UIView>(forHeaderFooterType type: T.Type) { |