しめ鯖日記

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

Docker+Railsでサーバー立ち上げメモ

Docker+Railsでサーバーを立ち上げた時のメモです。 元々Dockerを使わずに運営していたのですが、CentOS6がサポート切れになったことやbundle installでよく苦戦する事もあって環境を作り直す事にしました。 今回のOSはmacOSになります。 今回の構成ですがま…

PHPickerViewControllerで画像を取得する

PHPickerViewControllerというiOS14から登場したクラスで画像を取得してみました。 このクラスはUIImagePickerControllerと違って複数画像を選択することなども可能です。 まずは画面に画像選択用のボタンを設置します。 class ViewController: UIViewContro…

AndroidのEditTextやTextViewのフォントを明朝体にする

android:fontFamilyをserifにするだけです。

【Kotlin】Applicationを継承したクラスを試してみる

AndroidのApplicationクラスを使ってみました。 Applicationを継承したクラスは全Activityからアクセスできるクラスになります。 クラスは下のように定義します。 class MainApplication: Application() { } 下のようにAndroidManifest.xmlのapplicationタグ…

【Kotlin】NavControllerを試してみる

Empty Activityを選んでプロジェクト作成をします。 起動すると下のようにラベルだけの画面が表示されます。 次はナビゲーションを作成します。 まず新規作成でAndroid Resource Fileを選択します。 Resource TypeをNavigationにしてOKを押します。 my_navig…

SF Symbols + UIImageでアイコンを表示する

SF SymbolsというAppleの提供しているアイコンを使える機能を試してみました。 developer.apple.com SF Symbols + UIImageでアイコンを表示する 使い方は簡単で、下のようにUIImageの初期化でアイコン名を渡すだけです。 引数のラベルがUIImage(name: "")で…

iOS13のカスタムフォントを試してみる

iOS13から使えるようになっていたカスタムフォントのAPIを試してみました。 この機能を使うと端末へのフォントインストールやフォントの確認ができます。 まずはフォント一覧の取得をしてみようと思います。 最初にテスト用のプロジェクトを作ります。 プロ…

【SwiftUI】GeometryReaderでViewのサイズを取得する

画面サイズによって処理を変えたかったため、GeometryReaderというクラスを使って画面サイズを取得しました。 Viewのサイズは下の形で取得できます。 struct ContentView: View { var body: some View { GeometryReader { geometry in Text(String("\(geomet…

Xcode 12でbuilding for iOS Simulator, but linking in object file built for iOS, for architecture arm64というエラーが出た時の対応

Xcode 12でビルドした時、下のようなエラーが出た時の対応です。 エラーはCocoaPodsで入れたRealmで発生していました。 building for iOS Simulator, but linking in object file built for iOS, for architecture arm64 結論としては、PodfileにEXCLUDED_AR…

CocoaPodsのライブラリをstatic化して高速化

下記事を参考にアプリ起動の高速化を試してみました。 iOSアプリの起動速度を2倍にするために、複数のDynamic FrameworkをStaticにして、ひとつのDynamic Frameworkを作る with Swift | by Muukii (Hiroshi Kimura) | Eureka Engineering | Medium まずはDyn…

gRPCをSwiftで使ってみる

gRPCを使ってgoのサーバーにSwiftでアクセスする処理を実装しました。 Swiftは5.2、Go言語はgo1.14.4、protobufは3.12.3を使っています。 gRPCとは gRPCとはGoogleが開発したRPCを実現するためのプロトコルのことです。 RPCはremote procedure callの略で、…

SwiftUIのGeometryReaderを試してみる

SwiftUIのGeometryReaderという構造体を使ってみました。 GeometryReaderとは自身の座標やサイズを子Viewに渡せる構造体です。 これを使う事で、動的に変化するViewなどが作りやすくなります。 今回は下URLを参考にさせて頂きました。 qiita.com 参照URLにも…

XcodeGenでxcodeprojファイルをyamlで管理する

XcodeGenというxcodeprojファイルをyaml管理できるツールを試してみました。 これを使う事でxcodeprojファイルのコンフリクトを避ける事ができるようになります。 github.com インストール 今回はbrewを使ってインストールしました。 brew install xcodegen …

nmコマンドで.frameworkにUIWebViewが入っているか確認する

nmコマンドでUIWebViewを使っているか判別できるという事で検証してみました。 参考にしたのは下サイトです。 qiita.com まずは下記事を参考に自作のframeworkを作ります。 llcc.hatenablog.com 作成したframeworkに下のようなクラスを1つ追加します。 impor…

Xcodeの[プロジェクト名].entitlementsというファイルについて調べてみる

Xcodeで自動的に作られる[プロジェクト名].entitlementsについて調べてみました。 [プロジェクト名].entitlementsとは entitlementsとはプッシュ通知やApp Groupsなど、プロジェクトのCapabilityでの設定に関するファイルです。 Capabilityで通知の追加やApp…

Realm Swift + SwiftUIでテーブル表示・編集・削除

Realm SwiftとSwiftUIを使ったテーブル実装を試してみました。 注) 2020/04/26時点でRealmはSwiftUIを公式サポートしていません。 対応状況は下Issueを参考にしてみて下さい。 github.com 表示 プロジェクトを作ったらCocoaPodsでRealmSwiftを追加します。 p…

Swiftでframeworkを作成する

アプリ開発で良く出てくる.frameworkという拡張子のライブラリを自作してみました。 frameworkを作成する Xcodeで新規プロジェクト作成時にFrameworkを選択します。 プロジェクトは下のようなファイル構成になっています。 Productsの中に入っているMyFramew…

Sequenceプロトコルを使ってみる

Sequenceというプロトコルを試してみました。 Sequenceは配列に使われているプロトコルで、準拠することでforEachやmapなどのメソッドを使うことができます。 実装例は下の通りです。 deferを使ってreturnの後にcountを-1しています。 これで10から1までを順…

Swiftで文字列を一定の長さ毎に区切って配列にする方法

下のように文字を一定の長さで区切って配列にする方法を調べてみました。 "あいうえお" → ["あい", "うえ", "お"] 標準のメソッドは用意されてないようなので、下のように独自のメソッドを追加しました。 extension String { func split(length: Int) -> [St…

SwiftUIで出てくるバックスラッシュの意味を調べる

SwiftUIを使っていると出てくる\.記法について調べてみました。 この記法は以下のようにForEachなどで使われます。 struct ContentView: View { var body: some View { let models = [ MyStruct(id: 1, name: "name1"), MyStruct(id: 2, name: "name2"), ] r…

Swiftのassociatedtype再勉強

Swiftのassociatedtypeの仕様を再度勉強しました。 associatedtypeを使うと下のように独自の型(下の例だとMyType)を定義することができます。 protocol MyProtocol { associatedtype MyType } 定義した型は下のようにメソッドの引数や戻り値に使うことができ…

SwiftUIのViewBuilderについて調べてみる

SwiftUIのVStackやHStackでは、下のようにTextを2行並べて書くだけでTextを縦並びにできます。 今回はこの仕組みについて調べてみました。 struct ContentView: View { var body: some View { VStack { Text("AAA") Text("BBB") } } } 上記のコードですが、…

SwiftUIでローカル変数を定義する方法

SwiftUIだとローカル変数の定義でエラーになることが多いので整理してみました。 SwiftUIでのローカル変数定義方法 bodyの中の場合は下のようにreturnを付けることで定義できます。 struct ContentView: View { var body: some View { let a = 1 return Text…

SwiftUIのEnvironment/EnvironmentObjectとはなにか

SwiftUIのEnvironment / EnvironmentObjectという記法について調べてみました。 EnvironmentObjectとは EnvironmentObjectとはObservableObjectを外部から渡したりできるようになる記法です。 宣言は下のように行います。 struct ContentView: View { @Envir…

SwiftUIのsomeキーワードについて調べてみる

SwiftUIでViewを作る時、以下のようにsomeというキーワードが出てきます。 今回はこのキーワードについて調べてみました。 struct ContentView: View { var body: some View { Text("Hello, World!") } } 調査にあたって以下の記事を参考にさせて頂きました…

Today Extensionでウィジェット作成

Today Extensionを使ったウィジェット作成を試してみました。 プロジェクトを作成したらメニューからTargetの作成を行います。 Today Extensionを選択します。 作成するとToday Extension関連ファイルが作られます。 Today Extensionを起動するとHello world…

SwiftUIを触ってみる

SwiftUIで簡単なUIを作ってみました。 まずはXcode11で新規プロジェクトを作成します。 テンプレートは「Single View App」を選びました。 プロジェクト構成は以下のようになっています。 Xcode11からはSceneDelegate.swiftというファイルが追加されています…

Googleのデータポータル(旧DataStudio)でアプリの新規ユーザーをグラフ化

先日の記事でFirebaseのデータをBigQueryに追加しました。 今度はBigQueryのデータをデータポータルというツールを使ってグラフ化してみようと思います。 www.cl9.info データポータルとは データポータルとはGoogleの提供しているデータをビジュアライズ化…

FirebaseのデータをBigQueryに入れて分析する

Firebase単体だと見づらいデータが多いのでBigQueryに入れて分析してみました。 今回はFirebaseとBigQueryを連携して新規ユーザー数を取得するところまでやります。 ドキュメントは下URLになります。 Firebase 向け Google アナリティクスのデータを BigQuer…

iOSでアプリ内課金したのに反映されないという問い合わせが来た時の対応策

タイトルのような問題が起きたので、その原因と対策について調べてみました。 起こったこと iOSでアプリ内課金したのに反映されない もう一度購入しようとすると、「このアイテムは購入済みです。無料で再入手しますか?」と出て来るが、「OK」を押しても反映…