しめ鯖日記

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

iOS

LAContextのbiometryTypeがnoneになる問題

iOS

LAContextクラスのbiometryTypeプロパティーを使うと端末が指紋認証に対応しているか顔認証(FaceID)に対応しているかを判定する事ができます。 LAContext().biometryType == .faceID LAContext().biometryType == .touchID LAContextのbiometryTypeで起こっ…

【アプリ開発】AppLaunchPadでアプリのスクショを作ってみる

iOS

AppLaunchPadというWEBサービスを試してみました。 theapplaunchpad.com これはAppStoreやGooglePlayに掲載するおしゃれなスクリーンショットを簡単に作れるものです。 有料限定のテンプレートも多いのですが、下のような画面を簡単に作る事ができます。 App…

UITableViewのprefetchDataSourceについて調べてみる

iOS

iOS10からUITableViewのprefetchDataSourceというプロパティーが追加されてたので調べてみました。 prefetchDataSourceとは prefetchDataSourceはUITableViewの高速化に使うプロパティーです。 下のようにUITableViewDataSourcePrefetchingに準拠したオブジ…

【Swift】Dateの日付のみを扱う方法を考える

iOS

iOSアプリ開発ではDate型があるのですが、これは日付型のみを扱う事ができません。 そのため「RealmなどのDBから特定日付のレコードを取り出したい」という時に開始日と終了日を指定する必要があって結構めんどくさいです。 class History: Object { @objc d…

DOFavoriteButtonでアニメーション付きお気に入りボタンを実装する

iOS

DOFavoriteButtonというアニメーション付きのボタンを実装できるライブラリを試してみました。 github.com DOFavoriteButtonのインストール CocoaPodsでインストールしました。 本家はSwift4に対応してないようなので、fumiyasacさんのSwift4対応フォークリ…

【iOS】CMSampleBufferGetImageBufferがnilを返す時の対処法

iOS

AVFoundationを使うと端末のカメラで撮っている映像をUIImageとして取得する事ができます。 その際にCMSampleBufferGetImageBufferというメソッドを使うんですが、これがnilを返した時の対処法です。 func captureOutput(_ output: AVCaptureOutput, didDrop…

CASpringAnimationでバネのようなアニメーションをお手軽実装

iOS

CASpringAnimationというクラスを使ってバネのようなアニメーションを実装してみました。 まずは画面上にアニメーションさせたいViewをセットします。 import UIKit class ViewController: UIViewController { override func viewDidLoad() { super.viewDidL…

AVAudioEngineで複数音源を合成して再生

iOS

AVAudioEngineを使って複数のmp3音源を同時再生する実装を試してみました。 プロジェクトを作ったら、再生したい音をプロジェクトに追加します。 今回はドとミの音を追加しました。 まずは単一の音源を再生します。 再生はAVAudioPlayerNodeを使って行います…

【Swift】音声を扱うライブラリ、AudioKitを試してみる

iOS

ピアノアプリの改善の為にAudioKitについて調べてみました。 ピアノアプリPolo - 録音付きで練習できる鍵盤ピアノhiroki sugimotoミュージック無料 インストール まずはCocoaPodsでインストールします。 target 'MyApp' do use_frameworks! pod 'AudioKit' e…

WKProcessPoolが違ってもWKWebView同士のcookieを同期されていた

iOS

複数WKWebViewがある時の挙動を調べてみました。 まずは下のようにWKWebViewを2つ並べます。 import UIKit import WebKit class ViewController: UIViewController { override func viewDidLoad() { super.viewDidLoad() let rect1 = CGRect(x: 0, y: 0, wid…

【Swift】Crashlyticsにログを送る

iOS

Crashlyticsのエラーを追いかける為にログを仕掛けてみました。 ログの取り方は下の通りです。 CLSLogv("Log!!!", getVaList([])) 仕掛けたログはCrashlyticsで下のように表示されます。

【iOS11以降対応】WKWebViewのcookieの取得とセット

iOS

WKWebViewのcookieの取得とセットについて調べました。 cookieの取得は、getAllCookiesメソッドで行います。 webView.configuration.websiteDataStore.httpCookieStore.getAllCookies { print($0) } Cookieは下のようにData化してUserDefaultsに保存する事も…

iOSシミュレータで一部WEBページが開けない問題対応

iOS

シミュレータでWKWebViewの動作確認をしている時に起こった問題です。 WKWebViewを設置してはてなブログを開いたら、下のようにCSSが読まれない現象が発生しました。 色々設定見てもダメなので、シミュレータのSafariで適当なページ開いたら下のような表示が…

【Swift】HealthKitのrequestAuthorizationメソッドがfalseを返した時の対処法

iOS

HealthKitのデータが取れずに困った時のメモです。 現象 下メソッドでHealthKitへのデータアクセス画面が出るはずなのに出ない。 resultがfalseになってしまう。 HKHealthStore().requestAuthorization(toShare: nil, read: []) { result, error in } うまく…

【Swift】Speech Recognitionの制限について検証する

iOS

iOS10から登場した音声認識API(Speech Recognition)の挙動について調べてみました。 60秒を超えた時の挙動 テストプロジェクトを作り、ViewControllerを下のようにして検証しました。 このコードでは5秒時点と55秒時点と62秒時点でのタスクステータスを見て…

【Swift、検証】didSetでの#functionがどうなるか調べてみる

iOS

Swiftには現在のメソッド名を返してくれる#functionというリテラルがあります。 このリテラルがdidSetやComputed propertyだとどうなるかを調べてみました。 func myMethod() { print(#function) // → myMethod } myMethod() didSetでの#functionの挙動 didS…

【iOS】Xcconfigで設定を外部ファイル化

iOS

Xcconfigというファイルを試してみました。 このファイルを使うと、下のような書き方で設定を定義できます。 Xcconfigを使わない場合は下記のようにBuild Settingsで行う必要があります。 Xcconfigの使い方 Xcconfigファイルの作成は、Configuration Setting…

SKShapeNodeのfillTextureに画像をセットしたのに表示されない時の対処法

iOS

表題の件で少しハマったのでメモ。 画像を表示する方法 まずはプロジェクトに画像を追加します。 画像を追加したら、下のようにSKShapeNodeのfillTextureに画像をセットします。 import SpriteKit class GameScene: SKScene { override func didMove(to view…

【Swift】Calendar, Locale, TimeZoneなど、国際化周りのクラスを整理

iOS

国際化対応の時、Calendar, Locale, TimeZoneなど様々なクラスが出てきて混乱したのでそれぞれのクラスの役割について調べてみました。 Calendar Calendar - Foundation | Apple Developer Documentation A definition of the relationships between calenda…

【iOS】BartyCrouchでiPhoneアプリの国際化

iOS

BartyCrouchというツールを使ってアプリの国際化対応をしてみました。 github.com Bartycrouchでできること Bartycrouchでできる事は下の通りです。 Storyboardに追加されたラベルをLocalizable Stringsに書き出す NSLocalizedStringの情報をLocalizable Str…

MYBlurIntroductionViewを使ったチュートリアル作成

iOS

MYBlurIntroductionViewというウォークスルーを作るライブラリを試してみました。 github.com インストールはCocoaPodsで行います。 target 'MyApp' do use_frameworks! pod 'MYBlurIntroductionView' end 実際に使うにあたって、まずは適当なアイコンをプロ…

Embedded Frameworkを作ってみる

iOS

iOS8から導入されたEmbedded Frameworkを試してみました。 Embedded Frameworkは動的なライブラリで、プロジェクト分割によってコンパイル速度が早くなる・Extensionとの共通処理を書きやすいと言った利点があるようです。 まずは新規プロジェクトの作成をし…

PalauでUserDefaultsの管理を簡単に

iOS

Palauというライブラリを試してみました。 github.com インストールはcocoapodsで行いました。 target 'MyApp' do use_frameworks! pod 'Palau' end 使い方は下の通りです。 下のようにまずは変数を定義します。 import UIKit import Palau extension PalauD…

【iOS】Interpolateでオシャレウォークスルー

iOS

Interpolateというライブラリを試してみました。 github.com まずはCocoaPodsでインストールします。 target 'MyApp' do use_frameworks! pod 'Interpolate' end 次に実際に実装してみます。 今回は画面をスワイプすると色が黒から白に変わるというものを作…

【iOS】静的ライブラリ(.aファイル)を作ってみる

iOS

iPhoneアプリ開発をしているとよく出てくる静的ライブラリですが、自分が作ったことはなかったので試しに作ってみました。 静的ライブラリの作成 まずはXcodeの新規プロジェクトで、Static Libraryを選択します。 プロジェクトを作成すると下のようなフォル…

【Swift4】SpringIndicatorでおしゃれローディング

iOS

ローディング表示をオシャレにしたくて、SpringIndicatorというライブラリを試してみました。 github.com インストール いつものようにCocoaPodsでインストールします。 target 'MyApp' do use_frameworks! pod "SpringIndicator" end 実装 実装はとても簡単…

Reachability.swiftで通信状況を確認する

iOS

Reachability.swiftというライブラリで現在の通信状況を調べてみました。 Reachability.swiftのインストール インストールはCocoaPodsで行いました。 target 'MyApp' do use_frameworks! pod 'ReachabilitySwift' end 通信状況を確認する Wifi/キャリア通信/…

Admobのネイティブアドバンス広告を試してみる

iOS

Admobのネイティブアドバンス広告というフォーマットを試してみました。 これは他社でよくあるネイティブ同様、渡された文字列や画像で広告画面を作っていくもののようです。 ネイティブアドバンス広の広告ユニット作成 まずはAdmobの画面から広告ユニットを…

iPhoneアプリリリース時の「輸出コンプライアンス」のチェックを省く方法

iOS

iTunesConnectから審査に提出する際、「輸出コンプライアンス」と「広告ID」についてチェックをする必要があります。 毎回入力するのが手間だったので、省略する方法はないか調べてみました。 調べたところ、「輸出コンプライアンス」はInfo.plistにITSAppUs…

objc_getAssociatedObjectで既存オブジェクトにプロパティーを追加

iOS

objc_getAssociatedObjectを使ってUIViewに新しいプロパティーを生やしてみました。 UIViewにプロパティーを追加する UIViewにvalueというプロパティーを生やします。 実装は簡単で、下のようなextensionを追加すれば完了です。 private var valueKey = 0 ex…