読者です 読者をやめる 読者になる 読者になる

しめ鯖日記

swift, iPhoneアプリ開発, ruby on rails等のTipsや入門記事書いてます

SDWebImageライクなライブラリ、Kingfisherを使ってみる

Kingfisherというライブラリを使ってみました。 こちらはSDWebImageにインスパイアされて作ったもので、画像のダウンロードが簡単にできるものになっています。 github.com インストール いつものようにCocoapodsを使います。 target 'MyApp' do use_framewo…

【fastlane】1プロジェクトに複数アプリの入っている場合のメタデータ管理

1つのプロジェクトで複数アプリをリリースしている場合のメタデータ管理方法です。 複数アプリが全く同じメタデータならいいのですが、アイコンやスクリーンショットを別々にする場合少し工夫をする必要があります。 fastlaneの設定方法はこちらをご参照下さ…

InAppPurchase用ライブラリ、RMStoreを使ってみる

RMStoreというiPhoneのアプリ内課金を楽にしてくれるライブラリを使ってみました。 github.com インストール インストールはcocoapodsを使います。 pod 'RMStore' 使い方 商品情報は以下のように取得します。 引数にproductIdを渡せばSKProductの配列が返っ…

【iOS】iTunesConnectのSalesデータ取得プログラムを動かす【新方式に対応】

iTunesConnectの売上やダウンロード数などのデータを取得するプログラムに関する話です。 今まではiTunesConnectのSalesデータをAutoIngestion Toolというものを使って取得できました。 しかしこのツールは非推奨になり、2016年12月で停止してしました。 App…

fastlaneで複数の国のメタデータを一括更新

アプリの申請や証明書周りを自動化するfastlaneを試してみました。 インストール インストールはgemを利用します。 gem install fastlane fastlaneの初期化 インストールが終わったらfastlaneの初期化を行います。 プロジェクトのフォルダで以下コマンドを実…

【Swift】Chartsを使って色々なグラフを描画してみる

Chartsというライブラリを試して色々なグラフを使ってみました。 github.com インストール CocoaPodsでインストールしました。 target 'MyApp' do use_frameworks! pod "Charts" end 棒グラフ import UIKit import Charts class ViewController: UIViewContr…

【iOS】指紋認証を使ってみる

iPhone5sから登場した指紋認証ですが、まだちゃんと使った事がなかったので試してみました。 指紋認証可能化どうかはLAContextクラスのcanEvaluatePolicyメソッドを使います。 LAContextを使うためにはLocalAuthenticationをimportする必要があります。 impo…

【iOS】Smile-Lockでパスコードロック機能を実現する

Smile-Lockというライブラリを試してみました。 URL見るとリクルートライフスタイルで出しているライブラリなんですね。 github.com インストール CocoaPodsでインストールしました。 target 'MyApp' do use_frameworks! pod 'SmileLock' end 使い方 下のよ…

FirebaseRemoteConfigでA/Bテストを試してみる

Firebaseを使う準備 まずは下サイトで新しいプロジェクトを作成します。 Firebase Console プロジェクトを作成すると以下のような画面になるのでiOS アプリに Firebase を追加を選びます。 情報を入力してアプリを追加します。 次画面に移動するとGoogleServ…

R.swiftでNSLocalizedStringも取れるようになっていたので試してみる

R.swiftがいつの間にかNSLocalizedStringにも対応されていたので動かしてみました。 R.swiftとは R.swiftとはStoryboardや画像などの取得を便利にするライブラリです。 Storyboardの取得はUIStoryboard(name: "Main", bundle: nil)のように文字列で指定しま…

【Swift】WKWebViewのスクロール速度を変更する

WKWebViewのスクロール速度を変更する方法を調べてみました。 まずはViewControllerにwebViewを貼り付けます。 import UIKit import WebKit class ViewController: UIViewController { override func viewDidLoad() { super.viewDidLoad() let webView = WKW…

SKStoreProductViewControllerでアプリから移動せずにStore画面に行く

StoreKitのSKStoreProductViewControllerを使ってアプリ内でアプリのページに移動してみました。 まずはStoreKitを追加します。 SKStoreProductViewControllerはUIViewController同様にpresentをして表示します。 Storeの情報はloadProductメソッドで読み込…

複数のGKGoalを使って複雑なAIを作成する

昨日調べた事の続きです。 この記事では、GKGoalを使って特定のオブジェクトに向かって移動するAgentを作成しました。 今回は「特定のオブジェクトに向かって移動」「別のオブジェクトから逃げる」の複数を指定した場合を試してみます。 GKGoalとGKAgentで目…

GKGoalとGKAgentで目的に向かって動くオブジェクトを作ってみる

GameplayKitの「Agents, Goals, and Behaviors」という機能を試してみました。 GameplayKit Programming Guide: Agents, Goals, and Behaviors これは特定のオブジェクトに向かって移動したり、特定のオブジェクトから逃げるようなものを作れる機能です。 早…

【Swift】BuildTimeAnalyzer-for-Xcodeでコンパイルが遅い原因を探ってみる

こちらのXcodeプラグインを試してみました。 github.com インストールすると下のようなフォルダ構成になっているのでプロジェクトを立ち上げます。 立ち上げると以下のような画面になります。 ウインドウの指示通り、Other Swift Flagsにフラグを追加します…

iOS10でAutolayoutのアニメーションが効かなくなってた対策

iOS10になって、以下のようにAutolayoutのconstantを変更 & layoutIfNeededでアニメーションしてくれないという問題に遭遇しました。 constraint.constant = x UIView.animate(withDuration: 0.1, animations: { self.contentView.layoutIfNeeded() }) ひと…

【iOS10】UISearchBarのUITextFieldを取得する

UISearchBarのUITextFieldを取得する方法です。 subviewから無理やり取っているので、今後取れなくなる可能性もあるので注意が必要です。 let searchBar = UISearchBar() let textField = searchBar.subviews.first?.subviews.flatMap { $0 as? UITextField …

Swift3.0でインスタンスのクラス名を取得する

Swift3.0でクラス名の取得方法が少し変わっていたのでメモ。 dynamicTypeでなくtypeという大域関数を使うようになりました。 // Swift2.0 let view = UIView() NSStringFromClass(view.dynamicType) // Swift3.0 let view = UIView() NSStringFromClass(type…

Apple Pay と In-App Purchase の使い分け方を調べてみた

最近Suicaが使えると話題のApple Payについてです。 Apple Payについて最近調べていたところ、アプリ内の課金にも使える事がわかりました。 しかしアプリ内課金はIn App purchaseが既にあるので、その辺りの使い分けをどうしたらいいかを調べてみました。 Ap…

UITableViewCellEditingStyleでnoneを選んだ時にできる空白スペースを削除する

UITableViewCellで、削除ボタンを出さなくした時のスペースを消す方法です。 内容 UITableViewでは以下のようなメソッドを実装する事で編集中に削除ボタンを出さない事ができます。 override func tableView(_ tableView: UITableView, editingStyleForRowAt…

Xcodeアップデートでmach-o string pool extends beyond end of file fileエラーが出た時の対処法

下コマンドでDerivedDataの中身を削除する事で解決しました。 rm -rf ~/Library/Developer/Xcode/DerivedData/*

【In-App Purchase】iOSでInvalid Product Identifierが出た時の対処法

アプリ内課金でアイテム情報が取得できなかった時の対処法です。 今回のケースでは、iTunesconnectの「契約/税金/口座情報」を入力する事で解決しました。 入力後30分くらい経ったらプロダクト情報が取れるようになりました。

シンプルなRESTClient、insomniaを試してみる

insomniaというRESTClientを試してみました。 insomnia.rest アプリはこちらのページからダウンロードしました。 insomnia.rest 起動後画面は下のようなものです。 このようにURL指定でリクエストを送る事ができます。 ベーシック認証・ヘッダー・パラメータ…

【Swift】呼び出し元のメソッド名を取得する

メソッドの呼び出し元を取得する方法を調べました。 良くある方法はスタックトレースを見る方法です。 class MyClass { func originMethod() { targetMethod() } func targetMethod() { let symbols = NSThread.callStackSymbols() print(symbols.count >= 2…

自作のCocoaPodsライブラリのバージョンを上げる

自作のCocoaPodsライブラリのバージョンを上げる方法です。 まずはpodspecファイルのバージョンを更新します。 Pod::Spec.new do |s| s.version = "0.1.4" # ここのバージョンを変える end 次はそのバージョンのタグを作ってpushします。 git tag 0.1.4 git …

DIコンテナとは何かを調べてみた

DIコンテナとは何か調べてみました。 サンプルはSwiftで書かれています。 DIとは DIとはDependency injectionの略で、デザインパターンの一種です。 日本語では言うと依存性の注入などと呼ばれる事が多いです。 このデザインパターンは複数の関連するオブジ…

RealmのデータをGUIで確認できるRealm Browserを試してみた

Realm BrowserというRealmのデータを見れるツールが出ていたので試してみました。 Realmが公式で開発しているもので、1年以上前から出ていたようです。 Realm BrowserRealm開発ツール無料 起動するとRealmファイルの場所を聞かれます。 Realmファイルは、シ…

MacにDjangoをインストールしてサーバーを動かす所まで試してみた

Djangoをインストールしてサーバーを動かすところやってみました。 まずはPythonのパッケージ管理ライブラリであるpipをインストールします。 easy_install pip 次はpipを使ってdjangoをインストールします。 pip install django インストールが終わったので…

Macでの.bash_profileと.bashrcの違いを調べる

両者の違いを調べてみました。 それぞれに以下のような記述をして動作を確認してみました。 .bashrc echo ".bashrc" .bash_profile echo ".bash_profile" 新規タブや新規ウインドウを開いた時はbash_profileだけ出力されました。 逆にbashコマンドを実行した…

GoogleFormで簡単にフォームを作成してみる

GoogleFormを試してみました。 まずは以下のサイトからフォームを作成します。 www.google.com このように質問をどんどん追加していく事で作っていきます。 ラジオボタン以外の回答方式を作る事もできます。 作り終わったら右上の送信ボタンから質問を送信し…

NSBundleのpathForResourceがnilを返す原因

ファイルの追加をしたのにパスが取得できない事がありました。 NSBundle.mainBundle().pathForResource("aaa", ofType: "3gp") 確認した所、リソースとして登録されてない事が原因でした。 プロジェクト設定の「Build Phases」→「Copy Bundle Resources」で…

pod installでRealm Swiftがインストールできない時の対処法

以下のようなエラーが出た時の対処法です。 [!] /bin/bash -c set -e sh build.sh cocoapods-setup core is not a symlink. Deleting... Downloading dependency: core 1.1.1 core/librealm-macosx-dbg.a: bzip decompression failed tar: Error exit delaye…

LTMorphingLabelでUILabelをモーフィング

LTMorphingLabelというライブラリを使ってUILabelをおしゃれに変化させてみました。 github.com まずはStoryboardにUILabelを設置します。 設置したUILabelのクラスをLTMorphingLabelにします。 あとはテキストをセットするだけでラベルがモーフィング付きで…

RAMAnimatedTabBarControllerでUITabBarControllerをおしゃれにする

こちらのライブラリを使ってタブバー押下のアニメーションを追加してみました。 github.com CocoaPodsを使ってインストールします。 use_frameworks! pod 'RAMAnimatedTabBarController' 最初にStoryboardでUITabBarControllerを作成します。 次にUITabBarCo…

Macでディレクトリ一覧の容量を表示する

以下コマンドで今の場所のフォルダの容量一覧を表示できます。 du -s * hオプションを付ければ適切な単位を付与してくれて見やすいです。 du -sh *

【Swift】BWWalkthroughでおしゃれなウォークスルーを実装する

BWWalkthroughというライブラリを試してみました。 github.com CocoaPodsでインストールします。 pod 'BWWalkthrough' まずはStoryboardにViewControllerを作成し、BWWalkthroughViewControllerに紐付けます。 画面上に閉じるや次へボタンを設置したら、BWWa…

PageMenuでページ型のメニューを実現

PageMenuというライブラリを試してみました。 github.com CocoaPodsでインストールします。 pod 'PageMenu' 使い方としては、pageMenuにUIViewControllerを渡してpageMenuをviewに貼り付ければ完了です。 import UIKit import PageMenu class ViewController…

【Swift】SpringでViewをオシャレにアニメーション

Springというアニメーションライブラリを試してみました。 インストールはCocoaPodsを使います。 CocoaPodsの最新版はSwift2.0に対応していないのでGithubから直接取得します。 use_frameworks! pod 'Spring', :git => 'https://github.com/MengTo/Spring.gi…

【AutoLayout】縦向きと横向きで違うLayoutを実現する

同一のStoryboardで縦と横 別々のAutoLayoutを適用する方法です。 まずは普通にAutoLayoutを適用します。 左右と下に44pxの空白と、高さ128pxの制約をかけます。 実行すると縦・横の表示は以下のようになります。 これを横向きの時は下のスペースを0pxにして…

agvtoolでコマンドラインからビルドバージョンを操作する

agvtoolでXcodeプロジェクトのビルド番号やアプリバージョンを操作してみようと思います。 what-versionオプションでビルド番号を取得できます。 agvtool what-version next-versionコマンドでビルド番号をインクリメントできます。 agvtool next-version -a…

「アーカーのベネフィット3分類」を使ってアプリの価値を考える

「アーカーのベネフィット3分類」という考え方を使ってアプリの価値について考えてみました。 アーカーのベネフィット3分類とは 「アーカーのベネフィット3分類」とはデビッド・アーカーの提唱するもので、ベネフィット(価値)は以下の3種類に分けられるとい…

Storyboard上で設定できるGesture Recognizer一覧

Gesture Recognizerは以下7種類があります。 Tap Gesture Recognizer…タップイベント Pinch Gesture Recognizer…ピンチイン/ピンチアウト Rotation Gesture Recognizer…2つ指での回転 Swipe Gesture Recognizer…スワイプ Pan Gesture Recognizer…ドラッグ Sc…

【Swift】UIImageをNSDataに変換する

UIImageからNSDataに変換する方法です。 変換の形式ですが、JPEGとPNGを選択できます。 それぞれ以下のメソッドを使います。 UIImagePNGRepresentation UIImageJPEGRepresentation 実際に変換を試してみます。 最初にプロジェクトに画像を追加します。 それ…

【Swift】FirebaseのStorageを使って画像をアップロード

FirebaseのStorageという機能を使って画像のアップロード/ダウンロードを試してみます。 まずはこちらを参考にFirebaseの初期設定をします。 【iPhone】FirebaseのAnalytics機能を導入してみる - しめ鯖日記 次にCocoaPodsでFirebase/Storageをインストール…

Firebase Authでユーザー管理をする

こちらを参考にFirebaseの初期設定をします。 【iPhone】FirebaseのAnalytics機能を導入してみる - しめ鯖日記 次にCocoaPodsでFirebase/Authをインストールします。 use_frameworks! pod "Firebase" pod "Firebase/Auth" インストールが終わったらメールア…

Sketchでロングシャドウを付けてみる

Sketchでオブジェクトにロングシャドウを付ける方法です。 まずは影を付ける対象の他に1つ四角のオブジェクトを作ります。 Rotate機能を使って片方の角度を45度にします。 その後は幅と長さを調整して影のようにします。 片方だけ長さが足りない時などはEdit…

Sketch Toolboxでプラグインを簡単管理

Sketchのプラグインを簡単に管理できるSketch Toolboxというアプリを使ってみました。 インストールは以下より行えます。 Sketch Toolbox - A super simple plugin manager for Sketch 起動したら以下の画面になります。 ここでプラグインの検索/インストー…

Rubyの配列のzipメソッドを使ってみる

Rubyの配列にはzipというメソッドがあって、それを使うと2つの配列をつなげる事ができます。 [1, 2, 3].zip([2, 3, 4]) # → [[1, 2], [2, 3], [3, 4]] 引数の要素数が少ない場合、そこにはnilが入ります。 [1, 2, 3].zip([2, 3]) # → [[1, 2], [2, 3], [3, n…

【Swift】JSQMessagesViewControllerで簡単にチャットUIを作ってみる

JSQMessagesViewControllerというチャットライブラリを使ってチャットインターフェイスを作る方法です。 github.com ライブラリはCocoaPodsでインストールします。 use_frameworks! pod 'JSQMessagesViewController' チャット画面の表示は以下の通りです。 J…

backBarButtonItemをStoryboard上で設定する

UINavigationControllerの戻るボタンのカスタマイズについてです。 プログラム上で実装する場合は以下のように遷移元でbackBarButtonItemにセットする必要があります。 let backButtonItem = UIBarButtonItem(title: "戻るよ", style: .Plain, target: nil, …