しめ鯖日記

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

【iOS】ファイルから読んだUIImageが表示されない問題対応

ファイルから画像を読み込むアプリでうまく画像表示できない事がありました。 class ViewController: UIViewController { var imageView = UIImageView() override func viewDidLoad() { super.viewDidLoad() // 画像をファイルに保存 let path = "\(NSSearc…

【Swift】UIImagePickerControllerでカメラロールから写真を取得

UIImagePickerControllerを使ったカメラロールの操作を試してみました。 ImagePickerの表示 まずはカメラロールの操作の為に、Info.plistにNSPhotoLibraryUsageDescriptionというキーを追加します。 ここにはカメラロールの利用目的を書きます。 ここに書か…

【Swift】ファイル書き込みで「Error Domain=NSCocoaErrorDomain Code=518 "指定されたURLタイプがサポートされていないため、ファイルを保存できませんでした。」エラーが出た時の対応

表題のエラーが出た時の対処法です。 今回は下のように画像をファイル保存をしようとしたら発生しました。 let path = "/xxx/yyy/zzz" let image = UIImage() let data = UIImageJPEGRepresentation(image, 80) if let url = URL(string: path) { try? data?…

UIViewのサブクラスで`init?(coder aDecoder: NSCoder)`が必要と言われる理由を調べてみる

UIViewでinitializerを実装すると、init?(coder aDecoder: NSCoder)も実装するように言われます。 今回はinit?(coder aDecoder: NSCoder)と言われる理由などを調べてみます。 init?(coder aDecoder: NSCoder)とはなにか init?(coder aDecoder: NSCoder)はNSC…

NSNotification.Name.UIApplicationDidBecomeActiveの前半部が省略できる理由

iOS

表題の件について調べてみました。 NSNotification.Name.UIApplicationDidBecomeActiveはNotificationに渡す変数で、アプリ立ち上げ時に特定のメソッドを呼びたい時などに利用します。 // アプリがアクティブになった時にtestというメソッドを呼び出す Notif…

【Swif】指紋認証時のUIApplicationDelegateメソッドに関する検証

iOS

iOSで指紋認証をした時、AppDelegateのどのメソッドが呼ばれるかを調査しました。 指紋認証の方法は下記事を元にしました。 llcc.hatenablog.com 検証 アプリを作ったら、AppDelegateを以下のように修正します。 これで、指紋認証時にどのメソッドが呼ばれる…

【Reporter】iTunesConnectの売上取得をID/Pass方式からAccessToken形式に切替

iOS

iTunesConnectの売上情報をAPIで取得する部分の修正をしました。 以前はID/Passwordを使った取得方式だったのですが、Appleから「ID/Password方式は2017年8月から使えなくなるよ」というメールが来たのでAccessTokenで取得する方式に変更しました。 ID/Passw…

カイ二乗検定とは何かを調べてみる

統計について調べていたら「カイ二乗検定」という単語が出てきたので調査。 カイ二乗検定とは カイ二乗検定 - Wikipedia 帰無仮説が正しければ検定統計量が漸近的にカイ二乗分布に従うような統計学的検定法の総称である。次のようなものを含む。 Wikipediaに…

ChameleonでUIColorを便利に使う

iOS

Chameleonというライブラリを試してみました。 github.com インストール CocoaPodsでインストールします。 pod "ChameleonFramework" 使い方 UIColorに多くのフラットカラーが追加されます。 import UIKit import ChameleonFramework class ViewController: …

ダイクストラ法で最短経路を求めてみる

iOS

ダイクストラ法という最短経路を求めるアルゴリズムをSwiftで試してみました。 参考にさせて頂いたのはこちらの記事です。 ダイクストラ法(最短経路問題) ダイクストラ法とは ダイクストラ法(だいくすとらほう、英: Dijkstra’s algorithm)はグラフ理論に…

rspec-retryでfeature specを安定させる

rspec-retryという、失敗したテストを再実行するGemを使ってみました。 GitHub - NoRedInk/rspec-retry: retry randomly failing rspec example まずはRailsのプロジェクトを作ってfeature specを書きます。 require 'rails_helper' feature 'test' do scena…

モンテカルロ法で円周率を求める

iOS

囲碁AIで有名なモンテカルロ法で円周率を計算できるようなので試してみました。 モンテカルロ法とは、Wikipediaによるとシミュレーションや数値計算を乱数を用いて行う手法の総称とのことです。 モンテカルロ法 - Wikipedia 実装方法 計算の手順は下の通りで…

【GameplayKit】GKRuleSystemで複雑な条件を管理する

iOS

GKRuleSystemという複数の条件を管理する機能を使ってみました。 使い方は下の通りです。 GKRuleSystemにGKRuleを追加する GKRuleSystemにパラメータをセットする GKRuleSystemの評価メソッド(evaluate)を呼ぶ 評価の結果を取得する コードは下の通りです。 …

【Swift】ベジェ曲線を自前で描いてみる

iOS

ベジェ曲線って良く聞くんですが、イマイチ理解できてなかったので自前で描いてみました。 具体的にはベジェ曲線の座標を自分で計算して描画をしてみました。 ベジェ曲線の座標の求め方 ベジェ曲線の座標は制御点を使って求められます。 今回は下のように制…

【Swift3】UIViewのdrawの中で線や文字や画像を描画する

iOS

UIViewのdrawメソッド中では線・文字・矩形など様々なものを描画できます。 今回はそれらの描画を試してみました。 検証用コードは下の通りです。 import UIKit class ViewController: UIViewController { override func viewDidLoad() { super.viewDidLoad(…

WKWebViewのキャッシュなどをクリアする

iOS

個人で出しているブラウザアプリの容量がかなりの大きさになっていたので調査しました。 キャッシュ等の削除方法は下の通りです。 これでアプリ容量が500MB → 60MBまで減りました。 WKWebsiteDataStore.default().removeData(ofTypes: WKWebsiteDataStore.al…

【iOS】AdMobネイティブ広告を試してみる

iOS

AdMobでネイティブ エクスプレス広告というものを試してみました。 広告ユニットの作成 広告ユニット作成は、バナー広告同様にAdMobの管理画面から行います。 右端に"ネイティブ"というものがあるので、それを選択して作成します。 Startボタンを押すと、広…

【iOS10】ローカル通知に画像を添付する | User Notifications framework

iOS

User Notifications frameworkではローカル通知に画像を添付できるようなので試してみました。 画像なしの通知を送る まずは下記事を参考に通常の画像なしのローカル通知を送ってみます。 llcc.hatenablog.com 実装は下の通りです。 import UIKit import Use…

SFSafariViewControllerとSafariがcookieを共有しているかの調査

iOS

SFSafariViewControllerはiPhoneのSafariとのcookieを共有しているかどうか調査してみました。 SafariでセットしたcookieをSFSafariViewControllerで取得できるか SafariでTwitterでログイン。 その後SFSafariViewControllerを見るとどうなってるかを調べま…

フォルダ以下の全プロジェクトでgit pullする

下のように、フォルダ以下に複数プロジェクトがありそれらでgit pullしたい時のtipsです。 コマンドは下の通りです。 ls | xargs -I{} git -C {} pull origin master xargs -I{}でlsの結果を{}と書いた箇所で使えます。 git -Cはフォルダ指定でgitコマンドを…

iPhoneアプリにストリートビューを表示する

iOS

GoogleMapsSDKを使ってアプリ上にストリートビューを表示してみました。 準備 最初にGoogleAPIManagerでAPIキーを作成します。 まずは下サイトでGoogle Maps SDK for iOSを有効化します。 console.developers.google.com 次は下ページでAPIキーを作成します…

Processingで電子アート入門

Processingという電子アート用の開発環境を試してみました。 Processing.org インストール 下からアプリをダウンロードします。 Download \ Processing.org 実装 円を描画 Processingを起動すると以下のような画面になっています。 ここにコードを書いていき…

【ios】FirebaseAnalyticsのイベント送信を試してみる

iOS

Firebaseでイベントを送る方法を調べてみました。 GoogleAnalyticsの下処理に相当するものです。 let tracker = GAI.sharedInstance().defaultTracker tracker?.send(GAIDictionaryBuilder.createEvent(withCategory: "category", action: "action", label: …

【UIRefreshControl】UITableViewを下に引っ張ってリロード

iOS

UITableViewに下に引っ張るどリロードする実装を試してみました。 こちらはUIRefreshControlというクラスを使います。 UITableViewへのリロード処理の追加 実装は非常に簡単で、UIRefreshControlをUITableViewにaddSubviewするだけです。 class ViewControll…

User Notifications frameworkでローカル通知を送ってみる

iOS

iOS10から使えるようになったUser Notifications frameworkを試してみました。 通知の許可を得る まずはXcodeにUser Notifications frameworkを追加します。 許可を得る処理は以下の通りです。 引数で使いたいオプションを指定します。 UNUserNotificationCe…

GameplayKitの「Entities and Components」を試してみる

iOS

GameplayKitの「Entities and Components」を試してみました。 Entities and Componentsとは Entities and Componentsとは、コンポーネント指向プログラミングをサポートするものです。 コンポーネント指向プログラミングとは、そのオブジェクトの性質を継承…

Storyboardの多言語対応

iOS

Storyboardの多言語対応を試してみました。 まずはプロジェクトに言語設定を追加します。 プロジェクト設定で言語を選択して下さい。 下のような画面になるので、多言語対応するStoryboardを選択します。 選択したStoryboardには、以下のように.stringsファ…

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

iOS

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

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

iOS

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

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

iOS

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

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

iOS

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

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

iOS

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

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

iOS

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

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

iOS

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

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

iOS

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

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

iOS

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

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

iOS

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

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

iOS

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

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指定でリクエストを送る事ができます。 ベーシック認証・ヘッダー・パラメータ…