しめ鯖日記

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

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

iOS

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

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

iOS

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

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

iOS

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

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

iOS

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

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

iOS

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

【iOS10】UISearchBarのUITextFieldを取得する

iOS

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

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

iOS

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

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

iOS

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

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

iOS

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

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

iOS

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

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

iOS

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

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

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

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

iOS

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

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

iOS

自作の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を試してみた

iOS

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を返す原因

iOS

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

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

iOS

以下のようなエラーが出た時の対処法です。 [!] /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をモーフィング

iOS

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

RAMAnimatedTabBarControllerでUITabBarControllerをおしゃれにする

iOS

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

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

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

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

iOS

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

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

iOS

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

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

iOS

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

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

iOS

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

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

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

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

iOS

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

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

iOS

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

【Swift】UIImageをNSDataに変換する

iOS

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

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

iOS

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

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

iOS

こちらを参考に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を作ってみる

iOS

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

backBarButtonItemをStoryboard上で設定する

iOS

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

【iOSのエラー】This application is modifying the autolayout engine from a background thread, which can lead to engine corruption and weird crashes. This will cause an exception in a future release.の対処法

iOS

表題のエラーに遭遇した時の対処法です。 発生状況 viewDidLoadでAdMobの設置とAlamofireによる通信を行っている時に発生。 発生したりしなかったりする。 対応策 最初はAdMobをviewDidLoadからviewWillAppearに移動したりしたのですがダメでした。 その後は…

pythonのパッケージ管理システム、pipを試してみた

pipというpythonのパッケージ管理システムを試してみました。 pip listコマンドで今入れているパッケージ一覧が見れます。 pip list インストール可能なパッケージはsearchコマンドで見る事ができます。 pip search tensor インストール可能なパッケージはpy…

Search APIを使ってSpotlightの検索結果にアプリを表示

iOS

Core Spotlight APIsという機能を使ってアプリの検索結果にコンテンツを表示してみようと思います。 まずはCoreSpotlight.frameworkをプロジェクトに追加します。 次はどこか適当なタイミングでCSSearchableIndexへインデックスを追加します。 MobileCoreSer…

FirebaseCrash/upload-sym:128: error: SERVICE_PLIST: GoogleService-Info.plist could not be located エラーの対応策

iOS

Firebaseのクラッシュレポートを使おうとした時に起きたエラーです。 シミュレータでは起こらなかったのですが、実機で検証しようとした時に発生しました。 Run ScriptをBuild Phasesの一番下に移動する事で解決しました。 原因ですがGoogleService-Info.pli…

【iOS】Firebaseのクラッシュレポートを使ってみる

iOS

Firebaseのクラッシュレポート機能を試してみました。 最初に以下を参考にプロジェクトの作成とプロジェクトへのGoogleService-Info.plistの追加を行います。 【iPhone】FirebaseのAnalytics機能を導入してみる - しめ鯖日記 次にCocoaPodsでFirebase/Crash…

【iOS】FirebaseのRealtime Databaseを使ってサーバーにデータ保存してみる

iOS

まずはこちらの記事を参考にFirebase上にアプリを作ります。 【iPhone】FirebaseのAnalytics機能を導入してみる - しめ鯖日記 次にデータ保存のルールを変更します。 Firebaseではデフォルトではユーザー認証しないとデータ保存できないので、誰でもデータに…

【iPhone】FirebaseのAnalytics機能を導入してみる

iOS

本日GoogleIOでFirebaseの無償提供が発表されたので早速試してみました。 まずは以下ページでログイン&プロジェクト作成をします。 Google Cloud Platform すると以下のような画面に移動するのでiOSアプリにFirebaseを追加を選択します。 BundleIDを聞かれる…

Zip2で配列をまとめてみる

iOS

Zip2Sequenceというクラスを使うと複数の配列をまとめて処理する事ができます。 昔はZip2という名前でしたが、今はZip2Sequenceという名前に変わったようです。 使い方は以下の通りです。 2つの配列をZip2Sequenceの初期化時に渡すとタプルの配列のようなも…

SwiftでZIPを操作するライブラリ、zipを試してみた

iOS

Zipというライブラリを試してみました。 github.com インストールはCocoaPodsで行います。 pod 'Zip' Unzip 一番簡単な解凍の方法は以下の通りです。 quickUnzipFileの引数にURLを渡すと、解凍先のURLが返ってきます。 do { let destinationURL = try Zip.qu…

THPinViewControllerでパスコードロックを簡単実装

iOS

THPinViewControllerというライブラリを使ってパスコードロック画面を簡単に実装してみようと思います。 github.com インストールはCocoaPodsを使います。 pod 'THPinViewController' Objective-cのライブラリなのでBridging Headerでimportします。 #import…

【Swift】おしゃれカラーピッカー、HRColorPickerを使ってみる。

iOS

HRColorPickerというライブラリを試してみました。 http://hayashi311.github.io/Color-Picker-for-iOS/ インストールはいつものようにCocoaPodsを使います。 pod "Color-Picker-for-iOS" ライブラリはObjective-cなので、Swiftから使う場合はbridging heade…