The Pragmatic Ball boy

iOSを中心にやってる万年球拾いの老害エンジニアメモ

iOS

SwiftLint

Swiftでコーディング規約に沿っているかチェックするツールにSwiftLintというのがあるのでつかってみました。 SwiftLintではコーディング規約としてGithubのSwift style guildeを使っています。 使い方 $ brew install swiftlint XcodeでSwiftLintをかけるプ…

RxSwiftでログイン画面のサンプル実装

ユーザー名とパスワードを規定の文字数以上入力するとログインボタンが有効になるViewControllerをRxSwiftを使って実装してみました。 SwiftBondしか使ったことなく初めてRxSwiftを使ってみた感想としては、RxSwiftのほうが似たようなものがたくさんあり学習…

iOSでSlackのWebSocket疎通まで

やること iOSからSlackのWebSocketを使ってメッセージのやり取りをできる状態にする 事前準備 redirect urlを用意せずにモバイルアプリ単体でアクセストークンを取得するのは無理っぽいのでとりあえずテスト用のを使う テスト用のアクセストークンの取得 htt…

久しぶりにcocoapodsを使ってはまったところ

cocoapods 1.0.1 The dependency xxx is not used in any concrete target. Podfileの書き方がcocoapods 1.0系になって変わったらしく Podfileを $ pod init で生成すると # Uncomment this line to define a global platform for your project # platform :…

Crashlyticsにクラッシュレポートが送信されない

普通はFabricで手順通りにやってればクラッシュレポートは送信されるはずなんですが、なぜか送信されないってことがありました。 answersとかは動いているのでFabric自体はちゃんと取り込まれてるのになぜだ・・と思って調べたら troubleshootingに書いてあ…

3D Touch Peak, Popの使い方

1. 3D Touchの発火元となるviewの登録 UIViewControllerのregisterForPreviewingWithDelegateというメソッドを使って、3D Touchに反応するViewと、3D Touchが発生した際にハンドリングするdelegateを登録します。 override func viewDidLoad() { super.viewD…

iOS9のクイックアクション対応

ホーム画面のアプリアイコンを3D Touchすると実行されるクイックアクションの実装方法です。 Info.plistの変更 UIApplicationShortcutItemsを追加します。 例 Info.plist <key>UIApplicationShortcutItems</key> <array> <dict> <key>UIApplicationShortcutItemIconType</key> <string>UIApplicationShor</string></dict></array>…

SwiftでUnitTest時に環境変数で分岐させる

テスト対象を@testable import XXXXを使ってimportした場合に、テスト対象のコードをテスト時だけ分岐させて特定の処理を行わないようにしたりしたい場合の対処方法です。 方法としては、環境変数がセットされているかどうかでテストかどうかを判定します。 …

dynamic frameworkを使ってるプロジェクトでコマンドラインでipaファイル作成

Swiftでサブプロジェクトのモジュールをdynamic frameworkで取り込む場合にコマンドラインでipaファイルを作成する手順です。 環境:Xcode7.1 従来のやりかたではできなかったのでメモしておきます 発生した問題 以前Objective-Cでstatic libraryでやってい…

UnitTestでNSUserDefaultsに保存したデータを消す方法

UnitTestだとremoveObjectForKeyや NSUserDefaults.standardUserDefaults().removeObjectForKey("key") resetStandartUserDefaultsを呼んでもデータが消えません NSUserDefaults.resetStandardUserDefaults() 解決方法 setObjectでnilを突っ込む NSUserDefau…

Swift Bond v4

Swift BondがSwift2.0に対応し、更にインターフェースが大きくかわりv4としてmasterに統合されました。 主な変更点としては、 クラス名を刷新 これまではBond、Dynamicといった意味不明なクラス名がObservable, EventProducerに変わりわかりやすくなりました…

Swift2でArrayにArrayをinsertする

これまではsplice:atIndexでしたが items.splice(insertItems, atIndex: items.endIndex) Swift2(beta6以降)からinsertContentsOf:atに変わりました items.insertContentsOf(insertItems, at: 1) 例 var items = ["a", "b", "c"] let insertItems = ["1", "2…

iPadのマルチタスク(SlideOver, SplitView)対応

iOS9からiPadでmultitaskingが使えるようになります。 SlideOverはiPad Air以降、SplitViewはiPad Air2以降で利用できます。 SlideOver, SplitViewに対応したアプリの作成方法 新規で作成する場合 Xcode7で新しいプロジェクトを作ると特に何もしなくてもよい…

Swift2でStringを指定した文字で分割

beta5でsplitの仕様がちょっと変わり、以下のようにすることで文字列を分割できます。 let string1 = "hoge" let string2 = string1.characters.split("o").map{ String($0) } // [h, ge] Swift2からStringはCollectionTypeではなくなり、Stringの保持するch…

iOS9 ATSの設定方法

β4現在 Xcode7でビルドするとiOS9以降でApp Transport Security (ATS) が利用可能となります App Transport Security Technote: App Transport Security Technote デフォルトでhttps通信が必須となるので、この挙動を変更するには上の仕様に書いてあるように…

Xcode7 betaでiOS8.4端末にインストールできない場合

Xcode7 beta3で、iOS8.4の端末をつなげても"ineligible devices"となり、端末が選択できず実機にインストールできない。。 (追記:beta4ではiOS8.4に対応してます) 調べてみると8.4が入ってないです $ ls /Applications/Xcode-beta.app/Contents/Developer…

Swift2でのbitmask

Swift2からRawOptionSetTypeがOptionSetType (OptionSetType Protocol Reference) に変わったため、 例えばUIViewAutoresizingの場合、 これまでは view?.autoresizingMask = UIViewAutoresizing.FlexibleWidth | UIViewAutoresizing.FlexibleHeight だっ…

xcodebuildでdevice向けのビルドするときのdestinationの指定方法

以前xcodebuildのパラメータの指定方法についてこちらに書きました。 Travis CIでObjective-C/Swiftのテストを実行する - Pragmatic ball boy テストするときはシミュレータを指定するのでこれで問題ないのですが、 実機向けのstaticライブラリを用意したり…

iOS保守するときに年に一回くらい使うwikipediaのリンク

iOS

端末でどのバージョンまで対応してるか調べるとき Highest version of iOS supported 解像度を調べるとき Display iOSのβ版の過去の動向を見るとき iOSSDK History

32bit/64bit混成バイナリをiOS5.1.1端末にインストールできない

iOS

CocoaTouch 64ビット移行ガイド より、iOS5.1.1以降で32bit/64bitの混成バイナリが利用可能と書いてあります。 しかし、ipaファイルを作ってiOS5.1.1にインストールしようとすると失敗してしまいます。 AppleのDeveloper forumに情報があったのすが、 https:…

Travis CIでObjective-C/Swiftのテストを実行する

[環境]Xcode 6.1 Swift,Objective-Cどちらの場合でもこの方法でいけるはずです。 Travis CIにドキュメントが用意されていますが、xctoolを使った例が示されているので無視したほうがよいです。xctoolはAppleが用意した標準のビルドツールではなく、Facebook…

Appleのアプリの審査期間の目安

リリース時期が決まっているときなどはこれを見てどれくらい前に審査に出せば間に合いそうかチェックするのに役立ちます Average App Store Review Times 審査期間はiOS8以降ものすごく長くなっていて最近はだいたい10~11日。in reviewに入るまでがやたらと…

App Annie

AppStoreでリリースしたアプリのダウンロード数やレビューをチェックするのには itunes connectが用意されていますが、 はっきりいって使いづらいです。 そこでその辺りを便利にするツールとしてApp Annie(http://www.appannie.com/)が有名です。 App Annie…

Pixateが1年間無料に

iOSでCSS風にViewのデザインができる有料ライブラリであるPixateが 1年間無料で使えるようになったみたい。(これまで使ってた人も新規も) http://www.pixate.com/blog/article/2013-07-01-pixate-free/ iOS7が出る前に客をつかんでおきたいってことかな

AppCodeの使っているXcodeを切り替える

Xcodeを複数入れている場合に、AppCodeが思ったのと違うXcodeを参照しててビルド通らねぇ!とかいう場合の対処法 ==================================================== 追記(2014/10) 最近使ったらやり方が変わっていたので記載 =========================…

iPhoneアプリのAnalytics Tool

iPhone/iPadアプリで分析を行うためのツールとしては無料で使える有名どころとしては以下の2つがあります。 Google Analytics http://www.google.co.jp/intl/ja/analytics/ Flurry http://www.flurry.com/ どちらもiOS用のSDKがあるので、簡単に使うことが…