しめ鯖日記

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

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 ViewContro…

【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, …

【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.の対処法

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

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

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

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

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

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

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

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

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

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

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

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

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

Zip2で配列をまとめてみる

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

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

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

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

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

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

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

Swiftでバーコードを読み取ってみる

Swiftでバーコードを読み取る方法についてです。 取得はAppleが用意しているライブラリAVFoundationを使って行います。 まずはプロジェクトにAVFoundationを追加します。 ViewControllerのコードは以下のようにします。 アプリを起動するとカメラが立ち上が…

コールバックはどんな時に使うべきか考えてみた

最近コールバックで少し難解なコードに遭遇したのでそのことを書いてみます。 遭遇したのは下のようなコードです。 execを呼び出すと計算されて、その結果をexecutedに渡すというもの。 class Calculator { var executed: (Int -> Void)? func exec() { // …

【Swift】ImplicitlyUnwrappedOptionalなlazyの不思議な挙動

ImplicitlyUnwrappedOptionalなlazyが不思議な挙動をしたので調べてみました。 問題の挙動は以下の通りです。 変数にnilを入れたのに変数を参照しようとすると初期化処理が走りました。 class MyClass { lazy var value: Int! = { print("In Lazy") // → 2回…

CIDetectorで画像の文字を検知する

iOS9からCIDetectorで画像の文字認識ができるようになりました。 文字の内容までは読み取れないのですが、文字の位置・サイズを取得する事ができます。 使う為にCoreImageをプロジェクトに追加します。 featuresInImageメソッドを使う事で文字位置を取得でき…

CocoaPodsライブラリの更新で[!] You need to register a session first.と言われた時の対処法

CocoaPodsのログイン情報がないので以下のようにログインする必要があります。 以下コマンドを打つとメールが来るので、あとはそれに従って行動します。 pod trunk register メールアドレス

CIDetectorで画像の顔認識をしてみる

まずはCoreImage.frameworkをプロジェクトに追加します。 顔認識の方法は以下の通りです。 CIDetectorのfeaturesInImageメソッドで画像解析をします。 戻り値として顔・目・口の位置や、顔の角度などを取得できます。 trackingIDは動画を解析する際に、顔を…

HealthKitで身長の書き込み、読み込みをやってみる

HealthKitアプリを使ってデータの取得・保存を試してみました。 前準備 まずはプロジェクト設定のCapabilitiesをOnにします。 次にプロジェクト設定のGeneralのLinked Frameworks and LibrariesでHealthKit.frameworkを追加します。 ユーザーの許可を得る re…

active-rest-clientというGemでAPIを叩いてみる

RailsからAPIを叩くためにactive-rest-clientというGemを使ってみました。 使い勝手はActiveResourceに近いものでした。 github.com インストールはいつものようにBundlerを使います。 gem 'active_rest_client' データ取得/更新の為には、下記のようにModel…

国の入札情報を取得APIがあったので試してみた

APIについて調べていたら国・独立行政法人、地方公共団体等の入札情報を取得APIを発見したので触ってみました。 www.kkj.go.jp ドキュメントは以下URLです。 http://www.kkj.go.jp/doc/ja/api_guide.pdf 入札情報を取得する http://www.kkj.go.jp/api/にパラ…

「WatchConnectivityセッションをアクティベートしてください。」エラーの対処法

Watch ConnectivityのupdateApplicationContextを呼び出した時に表題のエラーが出た時の対処法です。 自分の場合はsession.delegateに値をセットしなかったためactivateがうまくいっていませんでした。 delegateに値を入れるようにしたら無事にデータ転送で…

WatchKit2でiPhoneとデータ共有するWatch Connectivity(Background transfers)を使ってみる

WatchKit1ではApp Groupsでデータ共有ができていましたが、WatchKit2ではOSの仕組みが変わった事によって使えなくなりました。 代わりにWatchKit2から使えるようになったWatch Connectivityという機能を試してみました。 準備 プロジェクトにWatchConnectivi…

UIDocumentInteractionControllerを使ったファイル共有でCouldn't get file size for (null): (null)エラーが出た時の対処法

UIDocumentInteractionControllerはファイルを他のアプリに共有できる機能です。 以下のように記述すればポップアップが出てきてその中のどれかのアプリにファイルを送信する事ができます。 この機能を試している時、ファイルは存在しているはずなのに表題の…

【iPhoneアプリ開発】Fabricアプリでログアウトする方法

Crashlyticsを使う為に必要なFabricアプリのログアウト方法です。 「cmd + L」でログアウトできました。

RailsでMySQL5.6に変えたのにMysql2::Error: Can't initialize character set utf8mb4が出た時の対処法

MySQLを5.1 → 5.6にアップグレードしたのにRailsで表題のエラーが出た時の対処法です。 結果としてはmysql2をインストールし直せば解決しました。 5.1の時にbundle installしたので、その時のものが悪さをしていたようです。 gem uninstall mysql2 bundle in…

SSHアクセスでPermission denied (publickey,gssapi-keyex,gssapi-with-mic).が出た時の対処法

アクセス先のサーバーで以下のようにパーミッションを変更したら解決しました。 最初は.sshフォルダもパーミッション変更が必要な事に気が付かず少し時間かかってしまいました。 chmod 700 ~/.ssh chmod 600 ~/.ssh/authorized_keys

【Swift】アプリのBundleIDを取得する

以下のコードで取得できるようです。 NSBundle.mainBundle().bundleIdentifier // → com.example.myapp

【CocoaPods】ライブラリ更新で [!] The `XXXXX.podspec` specification does not validate. エラーが出た時の原因

pod trunk pushでCocoaPodsライブラリのアップデートをしようとした時に表題のエラーが出た時の対処法です。 新バージョンに対応するgitのtagを更新していない可能性があるのでtagを付けてpushします。

Shoyuを使ってUITableViewをすっきり記述する

Shoyuというライブラリを使ってUITableViewを扱いやすくしました。 インストール インストールはCocoaPods経由で行います。 pod "Shoyu" 使い方 普通にUITableViewを使う場合、以下のような書き方になります。 class DetailViewController: UIViewController…

iPhoneアプリで動画再生 mobileplayer-iosを試してみる

mobileplayer-iosという動画再生ライブラリを試してみました。 github.com 動画ファイルを用意するだけで動画の再生ボタンやシークバー付きで動画再生ができます。 インストール方法 例の如くCocoaPodsを使います。 pod "MobilePlayer" 使い方 MobilePlayerV…

【iOS】アプリのチュートリアルにぴったりなGeccoを試してみる

会社の同僚の作ったGeccoというライブラリを試してみます。 GitHub - yukiasai/Gecco: Simply highlight items for your tutorial walkthrough, written in Swift 画面の説明を簡単に実装する事ができます。 導入方法 CocoaPodsとCarthageの両方に対応してい…

【iPhoneアプリ】Swiftで音声読み上げをやってみる

Swiftで音声を読み上げる方法を調べてみました。 まずはAvFoundationを導入します。 以下で音声読み上げをしてくれます。 import AVFoundation let synthesizer = AVSpeechSynthesizer() let utterance = AVSpeechUtterance(string: "こんにちわ") synthesiz…