- 1. 【Swift】知っておきたいKeyPathの基本と使い方
- 2. Flutter モーダルボトムシート(iOS風)でWebView表示
- 3. RxSwift入門に丁度いいサンプルコード書いてみた
- 4. 【Swift】Screen(画面)・StatusBar・NavigationBar・TabBarのサイズ取得を集約
- 5. 【iOS】世界一分かりやすいオープンソースライブラリの実装
- 6. 【iOS】App内課金のレシート検証で responseBody.Latest_receipt_info が undefined だった時の対処法
- 7. 【Flutter】Shimmerを利用してUXの高いローディング処理を実現
- 8. Apple ホームAppで暖房の予約をする
- 9. FlutterでFirebaseを使ってみる〜Firebase導入編(iOS)〜
- 10. 【Combine】debounce(for:schedule:option) オペレータを理解する
- 11. [iOS] 国際宇宙ステーション(ISS)を歩く AR アプリを作る
- 12. アニメ変換をiPhoneでつかいたい — CoreMLに変換すればOK
- 13. よく使うコマンド集
- 14. 【SwiftUI】アラートを表示する
- 15. Unity の SystemInfo.deviceModel が表示するiPhoneの情報
- 16. UIViewでTap検出
- 17. 文字列からスペースと改行を削除
- 18. プリクラ並みの美肌フィルターをつかう #YUCIHighPassSkinSmoothing
- 19. Swift Package内のリソースにアクセスする便利な方法
- 20. [iOS] AR ポータルアプリを作る
【Swift】知っておきたいKeyPathの基本と使い方
# この投稿は何?
Swiftにおける`KeyPath`について、基本から解説します。## 実行環境
– macOS 12.1
– Xcode 13.2.1
– Swift 5.5# KeyPathとは
要は、「あるデータ型に定義されたプロパティまでの参照(パス)」です。## Swift3時代のString KeyPath
`KeyPath`は、Objective-Cの時代から利用されていました。
Swiftでもそれを受け継いでおり、クラスに`objcMembers’属性をマークすることで利用できました。“`swift:参照型データの場合
@objcMembers class Kid: NSObject {
dynamic var nickname: String = “”
dynamic var age: Double = 0.0
dynamic var bestFriend: Kid? = nil
dynamic var friends: [Kid] = []init(nickname: String, age
Flutter モーダルボトムシート(iOS風)でWebView表示
# はじめに
**Flutter**で**iOS風 モーダルボトムシート**(モーダルが下から出て、後ろの画面が少し小さくなるあれ)でWebView表示を実装しました。# 環境
– Dart: 2.15.1
– Flutter: 2.8.1# 完成形
![modl_bottom_sheet.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1519965/ad735574-504d-e6fc-6494-c85c8edbf69f.gif)
# 実装
WebViewの説明に関しては、以下の記事で説明しているのでご覧ください。
– [Web画面表示(進捗バー付き)](https://qiita.com/k2rt/items/77cbd77b486c1b825d3f)## Package
[modal_bottom_sheet](https://pub.dev/packages/modal_bottom_sheet)を使用します。(名前そのまま)
“`pubspec.yaml
dependen
RxSwift入門に丁度いいサンプルコード書いてみた
## はじめに
最近、少しずつ`RxSwift`の勉強をしています。
僕が勉強始めた時、いい塩梅のサンプルコードを探すのに、少しだけ時間がかかってしまったので、自分が書いたサンプルコードを記事にしようと思いました。これから`RxSwift`の門を叩く方のお役に立てれば幸いです。
## 前提条件
– Swiftが読めること
– Codableを利用したAPIリクエストについて理解していること
– MVVMの特徴を理解していること
– RxSwiftが概要レベルで分かること## サンプルコードの概要
アプリを起動すると、Qiitaの記事一覧の検索APIをコールして、そのレスポンスをTableViewに表示するだけのアプリです。`RxSwift`で動く簡単なアプリを第一目標にしたので、
– Protocolで抽象を参照するなどのリファクタリングはしてません。
– エラーハンドリングとか適当です。↑ご容赦ください。
## コード&解説
`RxSwift`を利用するからには、データバインディングを活用したMVVMアーキテクチャを採用したいということで、今回は、MVVMで実
【Swift】Screen(画面)・StatusBar・NavigationBar・TabBarのサイズ取得を集約
#はじめに
画面の縦横の幅やそれぞれのバーの高さを取得することが割と多く感じたのでまとめました。#コード
“`swift
import UIKitstruct ScreenBarSizes {
// 画面の縦幅を取得する。
static func screenHeight() -> Int {return Int(UIScreen.main.bounds.size.height)
}// 画面の横幅を取得する。
static func screenWidth() -> Int {return Int(UIScreen.main.bounds.size.width)
}// ステータスバーの縦幅を取得する。
static func statusBarHeight() -> CGFloat {return UIApplication.shared.statusBarFrame
【iOS】世界一分かりやすいオープンソースライブラリの実装
#はじめに
アプリをリリースする際に著作権情報として使用したライブラリのライセンスを表示するかと思います。
LicensePlistを使用すると一発で使用中ライブラリを取得し設定アプリに表示してくれます。
アプリにコピペしなくて済む上に、ライブラリの追加・更新作業も自動でやってくれます。
もし他のサイトを参考にやってみたけどうまくできないという方にもお勧めです。https://github.com/mono0926/LicensePlist
#実装
今回はCocoaPodsにて導入していきます。
Podfileにて↓を記入してpod installします。“`
pod ‘LicensePlist’
“`プロジェクトを開き、NewFileにてSettings Bundleを追加します。
![スクリーンショット 2022-01-24 15.45.04.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/656839/54bf6d16-949e-cd26-06ec-39d02fd97080.p
【iOS】App内課金のレシート検証で responseBody.Latest_receipt_info が undefined だった時の対処法
“NG:“ responseBody. **L** atest_receipt_info
“OK:“ responseBody. **l** atest_receipt_info先頭を小文字にすればOKでした。
公式DOC([responseBody.Latest_receipt_info _ Apple Developer Documentation](https://developer.apple.com/documentation/appstorereceipts/responsebody/latest_receipt_info))は大文字始まりで書いてあるので注意です。
【Flutter】Shimmerを利用してUXの高いローディング処理を実現
インドネシアの[PT.AQ Business Consulting Indonesia](https://aqi.co.id/)でFlutterのエンジニア兼アドバイザーをしております菊池と申します。
Zennで本を出版しております[flutter chips](https://zenn.dev/tetsukick/books/06ee607e30e243)(30,000字程度)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/261934/5183aafc-d1d7-534f-f618-031f10790fdc.png)## Shimmerとは
データの読み込み中であることをユーザーに伝える方法の一つとして、読み込み中のコンテンツの形状に近似したUIの上に、グレー等の色でローディング状態を表現するアニメーションです。以下、[Flutter公式](https://docs.flutter.dev/cookbook/effects/shimmer-loading)から参照。
![]
Apple ホームAppで暖房の予約をする
#オフトゥンから出られない
執筆時現在の季節は真冬です。この寒い季節、私は朝布団からすぐに出ることができません。
そこで、起きる前にどうにかエアコンをつけて部屋を暖めておくことはできないかと考えました。#自室の環境
エアコンの制御はhomebridgeを母艦とするAppleのホームAppを使用しています。
iPhoneのホームAppからエアコンの任意の設定を行うことが可能です。
わかりやすく言うと、iPhoneでエアコンのオンオフや温度設定を自由に行える状態にあるということです。また、起床時のアラームはiPhoneの標準時計アプリを使っており、8時に予鈴が1回、20分後に1回鳴ります。
#環境の理想系
・就寝直前、翌朝の気温を確認して予約をする。
・予約がある場合、8時になったらエアコンをつける。
といったものを想定しました。ここで必要になる事は、
__(A) 就寝から8時までの間、予約をすることを記録しておく事__
__(B) その記録を元にエアコンをつける事__
の両方を満たす事です。
この環境でのこれらを満たす最適解を見つけようとしました。#解決策
###(i
FlutterでFirebaseを使ってみる〜Firebase導入編(iOS)〜
## 投稿の経緯
FlutterのキャッチアップでFirebaseと連携してFirestoreを使うサンプルプロジェクトを立ち上げました。今回はiOSアプリにFirebaseを導入してエミュレーターでビルドするところまでを書こうと思います。## 環境
Flutter:2.8.1
MacOS:12.1## サンプルプロジェクト
GitHubにコードPushしています。気になる方はご覧ください。
![QR_925113.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/643372/f774b418-6fc2-a814-c742-ebf8dde02847.png)## Firebaseの導入
公式情報を参考にして進めていきます。https://firebase.google.com/docs/flutter/setup?platform=ios#analytics-not-enabled
#### Firebaseプロジェクトの作成
![a800c466878afb7914d8583967d7
【Combine】debounce(for:schedule:option) オペレータを理解する
今回は、`debounce`というオペレータについて、理解してみようと思います。
## 環境
【Xcode】13.1
【Swift】5.5
【macOS】Big Sur バージョン 11.4## 公式ドキュメントから理解する
まずドキュメントにあったコードは以下の通り
“`swift
// 以下のimportはドキュメントにはなかったので追加
import Combine
import Foundationlet bounces:[(Int,TimeInterval)] = [
(0, 0),
(1, 0.25), // 0.25s interval since last index
(2, 1), // 0.75s interval since last index
(3, 1.25), // 0.25s interval since last index
(4, 1.5), // 0.25s interval since last index
(5, 2) // 0.5s interval
[iOS] 国際宇宙ステーション(ISS)を歩く AR アプリを作る
![title_1024.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/420332/e44ab591-1fc5-d9e1-6b33-c879334a4d2f.png)
閉じた空間の中にある構造物を歩き回る体験を AR(拡張現実)を使って提供します.iOS SDK の ARKit と RealityKit を使うと数行のコードでこれを実現することができます.この記事では、宇宙空間に浮かぶリアルスケールの国際宇宙ステーション(International Space Station: ISS)(一部分のユニット)の中を自由に歩き回ることができるアプリの作成方法を説明します.
# 仕組み
ISS(一部ユニット)のリアルスケールの 3D モデルを用意します.AR 体験を開始する際のデバイスの位置を ISS モデルの通路に位置合わせして仮想空間を作成します.こうすることで、背丈の異なる大人や子供が、AR 体験を開始したデバイスの位置に合わせて作られる仮想空間により、通路の中を自然な姿勢で歩くことができます.
アニメ変換をiPhoneでつかいたい — CoreMLに変換すればOK
#AnimeGAN2-pytorchをiPhoneで使える形式に変換する方法です
変換ずみモデルを入手したい方はこちら:
https://github.com/john-rocky/CoreML-Models
アニメ変換機械学習モデルであるAnimeGAN2をiPhoneアプリで使えるようにします。
#AnimeGANはかっこいい、、でもPythonかあ。。。
アプリケーションでPythonのモデルを使うには、サーバーに画像をアップして処理したり、、、と大変そう。
#CoreMLに変換すれば
よく使うコマンド集
コマンドを使用する際に、いつも検索する事から始めてしまい、時間も取られてしまうので、予めメモとして投稿しようと思いました。
– – –
#指定先に移動する
“`
cd 指定ファイル、フォルダまたはディレクトリ
“`
cdの後に半角スペース、後は指定先をドロップアンドドラッグでOKです。
#gitの初期化
“`
git init
“`
#設定したRepositoryの確認
“`
git remote -v
“`
#コミット履歴確認
“`
git log
“`
#ローカルエリアの差分確認
“`
git status
“`
#ステージングエリアに保存(全て)
“`
git add .
“`
#コミットする
“`
git commit -m”任意のメッセージ”
“`
#現在のブランチの確認
“`
git branch
“`
#リモート環境にアップロードする
“`
git push origin master
“`
“`
git push origin main
“`
– – –
#・トラブル発生時によく使うコマンド
#ファイル全体のキャッシュ削除
`
【SwiftUI】アラートを表示する
#環境
Xcode 13.2.1
Swift 5.5.2#実装
ボタンをタップした時にアラートを表示する場合は以下のようなコードになります。“`swift
struct ContentView: View {
@State private var isShowingAlert: Bool = falsevar body: some View {
Button(“アラートを表示する”) {
isShowingAlert = true
}
.alert(“Text”, isPresented: $isShowingAlert) {
Button(“Button1”) {
// タップした時の処理
}
Button(“Button2”) {
// タップした時の処理
}
} message: {
Unity の SystemInfo.deviceModel が表示するiPhoneの情報
Unity の SystemInfo.deviceModel が表示する iOS の情報についてです。
# 結論
https://www.theiphonewiki.com/wiki/Models の Identifier が表示されています。# 背景
問い合わせ用に Unity の SystemInfo.deviceModel の情報を取得しようとして、自身の端末 iPhone 11 Pro が iPhone 12,3 と表示され、なんのこっちゃと思ったので調べました。
Android は未調査です。# 参考
* [iPhone iPad 端末での 一般名と内部名の対応表](https://qiita.com/YumaInaura/items/31838a72678fa09d7e19)
UIViewでTap検出
UIViewでTap検出を行う
・Viewの作成時にGestureRecognizerをタップを検出したいUIViewに追加する
~~~
UIView* LabelA;
~~~~~~objc
// TapGestureRecognizer作成 タップ検出時LabelAをコールするよう登録
UITapGestureRecognizer *tapGesture = [[UITapGestureRecognizer alloc]initWithTarget:self action:@selector(LabelATap)];// UIView LabelA にタップ検出をアタッチ
[self.LabelA addGestureRecognizer:tapGesture];
~~~~~~
// LabelAタップ検知時処理
-(void)LabelATap{}
~~~[Apple Developler](https://developer.apple.com/documentation/uikit/uitapgesturerecognizer)
文字列からスペースと改行を削除
# 環境
– Swift ver 5.5.1# コード
## 文字列の前後から利用しているメソッド
– Apple Developer Documentation – [trimmingCharacters(in:)](https://developer.apple.com/documentation/foundation/nsstring/1415462-trimmingcharacters)
### スペースを取り除く
“`swift
let text = “ 前後にスペース ”
let trimmedText = text.trimmingCharacters(in: .whitespaces)
print(trimmedText, terminator: “”)
// 出力:”前後にスペース”
“`### 改行を取り除く
“`swift
let text = “\n前後に改行\n”
let trimmedText = text.trimmingCharacters(in: .newlines)
print(trimmedText, terminat
プリクラ並みの美肌フィルターをつかう #YUCIHighPassSkinSmoothing
#iPhoneでつかえる美肌フィルターのつかいかたです
#見たいものを見せることがサービスには肝要です
現代は浄化されたものが好まれる時代だと思います。
SNSでも、何も加工せずに顔写真を載せている人はむしろ珍しいのではないでしょうか?
もしもあなたが画像アプリを作りたい場合、美肌フィルターが必要になることもあるかもしれません。
さて、どのようにして商用アプリ並みの美肌加工を実装できるのでしょうか?Swift Package内のリソースにアクセスする便利な方法
## はじめに
本記事は [Swift/Kotlin愛好会 Advent Calendar 2021](https://qiita.com/advent-calendar/2021/love_swift_kotlin) の14日目の記事です。
空いていたので埋めました。Swift Package内のリソースにアクセスするには `bundle:` に `Bundle.main` でなく `Bundle.module` を指定する必要があります。
毎回指定するのが手間なので、私は便利メソッドを実装し、さらに __リソースへのアクセスを1つのSwiftファイルにまとめています__ 。
その方法を紹介します。## 環境
– OS:macOS Big Sur 11.6
– Swift:5.5.2
– Xcode:13.2.1 (13C100)## リソースの格納
Swift Packageにおいて、リソースのほとんどは `Sources/{target name}/Resources/` フォルダに格納すれば自動的にリソースと認識します。
## リソースにアクセスする便利な方
[iOS] AR ポータルアプリを作る
![TitleImage](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/420332/36bd045f-376b-d8ef-976c-0050c362c557.png)
AR ポータルアプリ(AR Portal App)は、入口(Portal)を通って特別な空間(内部空間)に入る体験を AR(拡張現実) を使って提供します.iOS SDK の ARKit と RealityKit を使うと数行のコードでこれを実現することができます.# 仕組み
内部空間を大きな箱や球で囲み、その内面にその世界の風景を貼り付けます.内部空間に入ると外部のカメラ映像が遮蔽されるため没入感が得られます.更に、その内部空間自体を外部から見えないようにすると、サイズや中の様子が分からないため未知の世界への期待感などを持たせることもできます.RealityKit の Occlusion Material はその内部を遮蔽するので、これを使って内部空間を外部から見えなくすることができます.
![pict1.png](https://q