iOS / Swift

iOSやSwift関連の記事です。

CocoaPodsを使って困った点、躓いた点をまとめて見ました

まだまだお付き合いしないと行けないCocoaPods Carthageが台頭して来て、利用するSDKがCarthage対応していたら大抵Carthage版をinstallするのですが、まだまだCocoaPodsで管理されているSDKが多い為、iOSエンジニアだとCocoaPodsを使うことを避けては通れま…

XCodeで Class ○○ is implemented in both ○○ and One of the two will be used. Which one is undefined.が出るときの対処法

XCodeで Class ○○ is implemented in both ○○ and One of the two will be used. Which one is undefined.が出るときの対処法を記載しています。

iOSのSectionの高さを指定した際に、Section末尾に余計な余白が生まれる時の解決法

TIME HACKERの次期開発で、メニューが煩雑になってきたため、グループ化を行おうとした際に掲題の通り、Sectionで余計な余白が生まれてしまって、軽く詰まったので備忘録です。

Embedded Frameworkのメリットと導入と使い方

Embedded Framework Embedded Frameworkは平たく言うと、アプリのコードを分割してFrameworkとして利用する事ができる機能です。 XCode8からの機能なので話題としては古いのですが、丁度アプリのリファクタリングを行っている際に、Embedded Frameworkを用い…

Type "xxx" does not confirm to protocol 'NSObjectProtocol'エラーの対処法

はじめに タイトル通りのエラーが出た時の対処法です。 例えば、Objective-Cのライブラリで、以下のようなプロトコルがあり、 @protocol Hogehoge <NSObject> これを宣言しようとした際、 class Fuga: Hogehoge 以下のようなエラーが出ます. Type "Fuga" does not conf</nsobject>…

Apple Watch対応アプリ申請でエラーになった時の対応 - Invalid Swift Support

Apple Watch対応アプリを申請しようとしたらエラーになった TIME HACKERのApple Watch対応したものを申請しようとした際に、Upload後メールで以下のエラーを受け取りました。 Dear Developer, We identified one or more issues with a recent delivery for …

Apple Developer Programの更新 2019年ver

iOSアプリをリリースする等の場合は、Apple Developer Programの登録(有料)が必要です。 また、このProgramは年に1度更新が必要となるのに加え、1年に1度の作業のため、毎回思い出しながら手探りで更新作業を行っていたので、備忘録として更新手続きを残して…

iOSでインジケータのようなくるくる回るアニメーションを造る - CGAffineTransform

はじめに インジケータを自作する方法です。 標準で搭載されているものでも十分事足りるのですが、アプリの色を出したいときにインジケータの演出もこだわりたいですよね。 提供中のTIME HACKERにも自作のインジケータを導入した方ので、以下のキャプチャの…

XCode10でビルドできなくなった時にやったこと - Multiple commands produce error

XCode10がリリースされ、早速手元にあるXCode9でビルドしたアプリもXCode10用にビルドしようとした際に以下のエラーが発生しました。 error: Multiple commands produce '/Users/{アカウント名}/Library/Developer/Xcode/DerivedData/{アプリ名}-hievebmhhbb…

Apple Watch - Watch OS4 でCoreData等を用いた開発 - Swift4

Apple Watch (Watch OS4) この記事では、Apple Watch (以降Watch OS)の開発にあたっての私なりの開発メモを記します。 また、何の断りがなければ、Watch OSはWatch OS4の事を指しています。 環境としては、 XCode 9.4.x Watch OS 4 (Watch Kit2) での開発で…

Watch OS 2 - WCErrorCodeDeliveryFailed が出てiPhoneとWatchでデータのやり取りが出来ない時の対応

はじめに Watch OS 2からは、Apple WatchがiPhoneアプリから独立して動くことになったので、これまでとは違った書き方が必要です。 この対応を行っている最中に、以下の様なエラーが出て詰まってしまったので、その備忘録を示します。 エラーの内容 WCErrorC…

Firebaseのエラーへの対処 - Terminating app due to uncaught exception 'com.firebase.core', reason: 'Default app has already been configured.

はじめに iOSのFirebaseでは、以下を二重に呼ぶ事は禁止されています(クラッシュします) FirebaseApp.configure() この時のクラッシュの内容は以下のようになります。 Terminating app due to uncaught exception 'com.firebase.core', reason: 'Default app…

TIME HACKER メイキング

TIME HACKERリリースしました! TIME HACKERをめでたくリリースすることができました。 まだの人は是非この機会にお試しください! 今回は、TIME HACKERを作るにあたり、その制作過程について記載していこうと思います。 今回の記事では、 どんなUX思想で作…

RealmSwift vs CoreData

はじめに iOSのローカルデータベースとして、これまでは、CoreDataが主流でした。 CoreDataの他だと直接SQLiteを弄ったり、ラッパーとなるFMDBなどのOSSがありましたが、Appleが提供している機能として、やはりCoreDataのシェア率は高かったと思います。 実…

Firebase A/Bテストを試す - Firebase A/B Testing

Firebase A/Bテスト Firebaseが提供しているA/Bテストを利用した記事となります。 この記事では、A/Bテストとは?から、 実際にTIME HACKERアプリで、インタースティシャルの表示頻度を確認する際に、A/Bテストを導入しているので、実際に実装した際の手順・…

GDPRを受けてアプリで対応したこと

GDPR(General Data Protection Regulation)とは 詳しいことは他サイト様に委ねますが、ざっくりというとEUでのデータ保護法則の新しい個人情報保護法が策定され、EU諸国では勝手に個人情報を取得、解析する事ができなくなりました。 ここ最近(2018年)、AdMob…

iTunesConnectで銀行情報の「Account Holder Type」でエラーが起きている時の対処法

はじめに iTunes Connectを開いたら、 こんな画面になっており、Agreements, Tax, and Banking のリンクを開いた際に、以下のように、あまり見慣れないエラーが出て焦りました。 Our records indicate that your banking information is incomplete: Missing…

UIViewからはみ出したViewを見れなくする方法

はじめに UIViewは、初期設定だと画面からViewがはみ出してもそのまま表示されてしまいます。 例えば以下のように高さ230pxのUITableViewCellがあるとして、 UITableViewで表示する際に、最初隠したい為に、44pxとした場合、以下のように崩れてしまいます。 …

UINavigationControllerに複数ボタンを並べる方法

はじめに アプリによっては、ナビゲーションの部分にボタンを複数設置しているものもあります。 提供中のKeyHolder もトップ画面のナビゲーションに複数配置してます。 この記事では、このやり方について紹介します。 はじめに Storyboard上、Xib上で配置 コ…

Quickを使ってSwiftコードのユニットテストを行う - Carthageからの利用

はじめに iOSのユニットテストを行うのに、標準ですとXCTestがありますが、 最近Quickと呼ばれるテストフレームワークがよく使われ出しました。 XCTestも非常に強力なテストフレームワークですが、初見であったり、他の人が記載したテストコードは中々読みづ…

Swift 構造体の使い方 - 基本定義, イニシャライザ, メソッドを扱う

はじめに 構造体とは値型のデータを構造的に持つものです。 特にSwiftの構造体は、その中でメソッドを作成出来たりと、クラスと何が違うねん!と思いますが、 構造体はクラスと違って代入や関数呼び出しの際、データの実態がコピーされ、新しいインスタンス…

Module compiled with Swift 4.0.3 cannot be imported in Swift 4.1: x86_64.swiftmodule エラーの対応

はじめに XCodeのVersionを挙げたら、標題の通りのエラーが発生するようになりました。 詳細には Module compiled with Swift 4.0.3 cannot be imported in Swift 4.1: RxSwift.framework/Modules/RxSwift.swiftmodule/x86_64.swiftmodule Carthage経由で入…

iOS Chartsの使い方 - iOS(Swift)でグラフを作る

はじめに iOSのグラフ描画OSSのChartsを利用してグラフ描画について紹介します。 今回は、後述の通り円グラフを表示させてみます。 はじめに Chartsとは 導入方法 実装方法 各種設定 円グラフを真ん中まで塗りつぶしたい グラフの中央にテキストを表示したい…

UITextFieldで入力判定を行う (UITextFieldTextDidChange)

はじめに 提供中のKeyHolderにて、UITextFieldで入力チェックを行っております。 こんな感じでUITextFieldに何も入力されていない場合は、画面右上の保存を非表示にし、 こんな感じでUITextFieldに入力されている場合は、画面右上の保存を表示しています。 …

UITabBarをUIViewController上の処理で非表示にする

はじめに TabBarを非表示にしたい場合、UITabBarController側で非表示にするのではなくて、Tabで表示するUIViewController上の処理で非表示処理を入れるやりかたです。 表示のタイミングでTabBarを非表示にする UIViewControllerには以下のコードを埋め込み…

High SierraでCarthageをinstallする (RealmSwiftをinstallする)

はじめに Carthageは、CocoaPodsのようなSwift製のライブラリ管理ツールです。 CocoaPodsも現役バリバリでライブラリ管理として非常に優れているのですが、workspaceを勝手に弄ったり、プロジェクトファイルを汚してしまうデメリットがあります。 Carthageは…

LocalAuthentication iOSで生体認証(Face ID, Touch ID)のまとめ

はじめに KeyHolderにFace IDやTouch ID等の、生体認証を導入したので、その際の備忘録を纏めます。 はじめに 実装方法 info.plist修正 NSFaceIDUsageDescriptionを追加 LocalAuthenticationをimport 認証用コードの実装 エラーコード (LAError.Code) 最後に…

High Sierraでcocoapodsが使えなくなった時にやったこと

はじめに MacOSがHighSierraになった際に、cocoapodsを実行した際に、 /usr/local/bin/pod: bad interpreter: /System/Library/Frameworks/Ruby.framework/Versions/2.0/usr/bin: no such file or directory のエラーが出て実行できなかった時に実施した事で…

swiftでtableViewを表示する…ときのエラー・トラブル対応方法

はじめに どうも、どうまずです。 Swiftを初めて、最初のほうにやること、『SwiftでTableViewを表示する。』 いくつかのサイトや参考書があり、私もそれらを見ながら作成しました。 しかし、エラーやトラブルで躓いていませんか? 躓きすぎて、匙投げようと…

iOS11でのクリップボードに文字列を渡す方法 - UIPasteboard

概要 これまでだと、以下の様にする事でクリップボードに文字列を渡すことが出来ました。 let pasteboard: UIPasteboard = UIPasteboard.general pasteboard.setValue("渡したい文字列", forPasteboardType: "public.text") ただ、このやり方はiOS11からは出…