- 1. ネイティブ開発か、クロスプラットフォーム開発か
- 2. Xcode14 IPAファイル書き出し時に特定のデバイスにインストールを制限
- 3. 【Swift】2つの要素の差分を取得する
- 4. Swift5.9からのObservationはどのような仕組みでクラスのプロパティを監視しているのか
- 5. アプリ内からiPhoneの「設定」アプリの通知設定画面に遷移する方法 (iOS 16~)
- 6. React NativeでWebViewを使って、Webページからデータを受け取る方法
- 7. [Swift] Journaling Suggestions API に関して
- 8. 【Swift】Observation基本の基。
- 9. 【SwiftUI】CGAnimateImageDataWithBlockやCGAnimateImageAtURLWithBlockを使ってGIFを表示する
- 10. Cordova iOSでSafeAreaの有無判定で悩んだ件
- 11. firebaseのsignInWithRedirectを用いてのGoogleログインが、iosだと正常終了しない問題
- 12. 【Swift】摂氏と華氏を切り替える
- 13. git hooksをトリガにしてfastlaneからユニットテストを実行する
- 14. 【Swift】負の数でも、数字の部分だけ取得したい(絶対値)
- 15. [SwiftUI]データバインディングについて(@State, @Binding, ObservableObject)
- 16. git hooksを使用して、git commit前に何がしかの処理を実行する
- 17. 【Swift】割り算の商と余りが欲しい!!
- 18. homebrew install時にwarningが出る’Warning: /opt/homebrew/bin is not in your PATH.’
- 19. 【TCA】UIKitでStateの変更をトラッキングするobserve(_:)メソッドの仕組み
- 20. 【SwiftUI】SFSymbolsのアニメーションはSFSymbolsアプリを活用しよう
ネイティブ開発か、クロスプラットフォーム開発か
## はじめに
モバイルアプリの開発として, ネイティブ開発にするかクロスプラットフォーム開発でFlatterやReactNativeを使うか、今でも議論が絶えません。
現在Androidのリードエンジニアとして働いている自分から見て、どう選定するかを個人的な意見を書きたいと思います。選定の方法として絶対正しい、はないと思いますので参考までにしていただければと思います。
下のような記事の内容はすでに把握している方が対象です。https://circleci.com/ja/blog/native-vs-cross-platform-mobile-dev/
## 前提条件
iOSとAndroidの両OSでアプリを作る必要がある場合を想定## 自分の経歴
自分のモバイルアプリ歴として、ざっくり書いておきます。
* Swift
– Swift UIで個人開発3件
– 100万円以上の収益化に成功しているアプリあり
– 経歴は1.5-2年ほど* Kotlin
– 個人開発で2件
– 経歴は1年ちょい
– 現在リードエンジニア
– 主にJetpa
Xcode14 IPAファイル書き出し時に特定のデバイスにインストールを制限
# Xcode 14でIPAファイルの書き出し時に特定のデバイスへのインストールを制限する方法
## 目次
– [はじめに](#はじめに)
– [Xcodeプロジェクトの開き方](#Xcodeプロジェクトの開き方)
– [デバイスの制限設定](#デバイスの制限設定)
– [まとめ](#まとめ)## ・ はじめに
Xcode 14を使用してiOSアプリケーションを開発する際、特定のデバイスに対してインストールを制限したい場合があります。この記事では、そのような場合にIPAファイルを書き出す方法を紹介します。## ・ Xcodeプロジェクトの開き方
まず、Xcodeを起動し、制限をかけたいプロジェクトの`Runner.xcworkspace`を開きます。![Xcodeプロジェクトの開き方](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3637125/a5212eb9-d53e-370e-30f7-ad4f7ba97e01.png)
次に、`Runner`を選択し、Targetの`Runner`から`
【Swift】2つの要素の差分を取得する
# はじめに
文章の差分検索ツールを作ろうかなって思い、
ちょっと調べたところ、`difference`という機能があることを知ったので記事にしておきます。# 実装
“`swift
import Foundationlet text1 = “2つの文章の差分を検索します”
let text2 = “2つのブンショウの差分を検索します。”print(text1.difference(from: text2))
// CollectionDifference
(insertions: [Swift.CollectionDifference .Change.insert(offset: 0, element: “2”, associatedWith: nil), Swift.CollectionDifference .Change.insert(offset: 3, element: “文”, associatedWith: nil), Swift.CollectionDifference
Swift5.9からのObservationはどのような仕組みでクラスのプロパティを監視しているのか
# はじめに
Swift 5.9からのObservationがどうやってプロパティを監視しているのか、Swiftのコードから仕組みについて書いておきます。Swiftのコードを読み間違えて解釈していることもあるかもしれませんが、誤りなど見つけたらコメントをください。
# 本題
## withObservationTrackingについて
Observationの[プロポーザル](https://github.com/apple/swift-evolution/blob/main/proposals/0395-observability.md)から、次のようなコードを見たことがあると思います。これはクラスCarのnameとnumberの変更を監視し、.onChangeが動作するというものです。
“`swift
import Observation@Observable
class Car {
let name: String
let number: String
}let cars: [Car] = …
@MainActor
func renderCar
アプリ内からiPhoneの「設定」アプリの通知設定画面に遷移する方法 (iOS 16~)
アプリからiPhoneの設定アプリを開くには `UIApplication.openSettingsURLString` を使いますが、そこから先のアプリごとの通知設定画面へ遷移させるようなURLは以前は提供されていませんでした。
しかしiOS 16から `openNotificationSettingsURLString` が追加されており、iPhoneの設定アプリ内にあるプッシュ通知の設定画面へ一発で遷移できるようになりました。
Appleありがとう。(みんなURLScheme使ってリジェクトされたりしてましたよね。。)https://developer.apple.com/documentation/uikit/uiapplication/4013180-opennotificationsettingsurlstrin
使い方
“`swift
if let url = URL(string: UIApplication.openNotificationSettingsURLString) {
await UIApplication.shared.open(url
React NativeでWebViewを使って、Webページからデータを受け取る方法
今回は、Webページの状況によって、Reactnative側で処理を変更したい場合に、データを受け取る必要があるため、詳細を記載していく。
WebViewのライブラリーを用いて、以下のガイドラインを参考に進めていく。
https://github.com/react-native-webview/react-native-webview
https://github.com/react-native-webview/react-native-webview/blob/master/docs/Getting-Started.md
## Webpageからメッセージを送る
### ディレクトリ・ファイル作成
最初にWebページを用意するために、以下のコマンドを入力します。
“`
mkdir WebPage
cd WebPage
touch index.html
“`### htmlファイルの変更
index.htmlに以下のコードを加えます。“`index.html
[Swift] Journaling Suggestions API に関して
# はじめに
iOS 17.2 から`ジャーナル`機能が提供されました!
(なんで、17.2 っていう中途半端なタイミングで…みたいなツッコミもありつつ…)今回、機能だけでなく開発者向けの API も提供されました。
https://developer.apple.com/videos/play/tech-talks/111384/
これを触ってみたので、ざっくりと紹介していきます。
# Journaling Suggestions API に触れてみる
公式の動画では、以下のステップで実行できるとのこと。
![Screenshot 2023-12-13 at 5.04.24.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/175242/dde17aa7-3a03-3472-7dbf-b8dd48816cc5.png)
(引用:https://developer.apple.com/videos/play/tech-talks/111384/)
では、実際にやっていきま
【Swift】Observation基本の基。
## はじめに
WWDC23で発表された新たなフレームワークのObservationの使い方を少しばかり勉強したのでアウトプットです。
今までのCombineとどのようにコードが変わるかを紹介していきます。## この記事でわかること
– Observationってどんなものか
– Observationを使ってとりあえずプログラムを動かす方法
– Combineと比較して何が変わったのか## 想定読者
– SwiftUI触ったことあるよーという人
– ObservableObject使ったことあるよーという人## この記事で説明していないこと
– UIKitとObservationを合わせてどう使うかについて
– “`@Bindable“`などのプロパティラッパーについて## Observationって?
– WWDC23で発表された新たなフレームワークです
– Combineの進化系。みたいなイメージでいいと思いいます
– iOS17からのみ使用可能です## 今回作るサンプル
– とてもシンプルなサンプルです。「add peach」ボタンタップするとリストに「
【SwiftUI】CGAnimateImageDataWithBlockやCGAnimateImageAtURLWithBlockを使ってGIFを表示する
# はじめに
数日前に「【SwiftUI】GIFを表示したい」という記事を書きました。https://qiita.com/SNQ-2001/items/f242f194391a47910e86
コメント欄でもっといい表示方法を教わったので試してみました。
# サンプルアプリ
![Simulator Screen Recording – iPhone 15 – 2024-02-08 at 22.24.03.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1745371/d1569305-61e7-7978-f028-d5b6bc3f0d32.gif)# 今回使用するGIF
![heart.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1745371/c5cc430a-6af6-986c-afc6-d102f4fd8991.gif)Cordova iOSでSafeAreaの有無判定で悩んだ件
CordovaでiPhoneアプリでも作ってみようかと、ちょっと手を出してみましたが、意外なところで、つまづいたのでメモ。
iPhone X以降、画面に切り込みが入り、「ノッチ」と呼ばれる部分が存在するようになりました。それで、iPhone SEやX以前には無かった画面上部の部分を、SafeAreaと呼ぶようです。
そして、この**SafeAreaの有無が簡単に取れないんです**!どうして?!
そして、散々調べて解決方法を見つけたので、ここにメモっておきます。
### 手順(1) CSSの準備
まず、以下のCSSを作成します。
“`css:root.css
:root {
–sat: env(safe-area-inset-top);
–sar: env(safe-area-inset-right);
–sab: env(safe-area-inset-bottom);
–sal: env(safe-area-inset-left);
}
“`下記の通り取り込むようにしておきます。
“`html:index.html
firebaseのsignInWithRedirectを用いてのGoogleログインが、iosだと正常終了しない問題
## はじめに
仕事でvue.jsを使うということで、勉強がてらアプリを作ってみようと思い、思った以上に使えそうなものができたのでβ版を公開してみようとしたところ、**何故かiphoneだけ、ログイン処理自体は通過できてもログイン状態にならず…**調べてみたところ以下の記事が見つかりました。
[Firebase AuthenticationでのサインインがiOS16.1でできなくなった際の障害対応記録](https://synamon.hatenablog.com/entry/2023/01/30/151518)とりあえずザクッと説明を省きまして、解決には以下の方法のどれかを取る必要があると
> 1.Firebase 構成を更新して、カスタム ドメインをauthDomainとして使用する
> 2.signInWithPopup() に切り替える
> 3.認証リクエストを firebaseapp.com にプロキシする
> 4.ドメインでサインイン ヘルパー コードを自己ホストする
> 5.プロバイダーのサインインを個別に処理する**今回は 1 の方法で対応することにしました
【Swift】摂氏と華氏を切り替える
# はじめに
摂氏・華氏の切り替えを実装しようとするとめんどそうです。
そこで、用意されているMeasurementを使用します。
これは色々な単位の計算をコネコネしてくれてめっちゃ便利です。今回はその例で摂氏・華氏を実装してみようと思います。
私たち日本人がよく触れる温度の単位は摂氏です。摂氏20℃は、華氏何°Fでしょう?と言われても全然わかりません。
なので[こちら](https://kunisan.jp/gomi/sesshi_kashi.html)のツールを使用させてもらいます。
![スクリーンショット 2024-02-07 22.02.10.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1745371/e0b12a33-1c64-c920-56c0-f47a477cb372.png)
摂氏20℃は、華氏68°Fらしいです。
ではiOSではどのように実装したらこの変換ができるでしょうか
実装してみます。# サンプルアプリ
いい感じですね。
四捨五入すれば、先ほど使用したツール
git hooksをトリガにしてfastlaneからユニットテストを実行する
## 大まかな手順
1. Xcodeプロジェクトを作成する
2. Gemfileを設定する
3. Fastfileの雛形を生成する
4. Fastfileに設定を記述する
5. fastlaneによるテスト実行を試みる
6. git hooksをトリガにしてfastlaneからユニットテストを実行する## 前提
– homebrewをインストール済み
– rbenvをインストール済み
– rubyを設定済み
– rubyはrbenvでインストールしたものを使用しています
– bundlerをインストール済み
– XcodeはGitで管理する設定にする##### 記事記載時(2024-02-07)の各ツールのバージョン
“`
$ brew –version
Homebrew 4.2.6
$ gem –version
3.5.5
$ rbenv –version
rbenv 1.2.0
$ ruby -v
ruby 3.3.0 (2023-12-25 revision 5124f9ac75) [arm64-darwin22]
$ bundle –versio
【Swift】負の数でも、数字の部分だけ取得したい(絶対値)
# はじめに
絶対値を取得したい時があったので、調べるとabsを使えばできるようなのでやってみました。# 実装
“`swift
import Foundationlet intPlus: Int = 10
let intMinus: Int = -10let doublePlus: Double = 10.5
let doubleMinus: Double = -10.5let floatPlus: Float = 10.5
let floatMinus: Float = -10.5let cgFloatPlus: CGFloat = 10.5
let cgFloatMinus: CGFloat = -10.5print(abs(intPlus)) // 10
print(abs(intMinus)) // 10
print(abs(doublePlus)) // 10.5
print(abs(doubleMinus)) // 10.5
print(abs(floatPlus)) // 10.5
print(abs(floatMinus)) // 10.5
p
[SwiftUI]データバインディングについて(@State, @Binding, ObservableObject)
# 目次
1. [データバインディングとは](#データバインディングとは)
2. [@Stateについて](#`@State`について)
3. [@Bindingについて](#`@Binding`について)
4. [ObservableObjectについて](#ObservableObjectについて)
5. [まとめ](#まとめ)
6. [さいごに](#さいごに)# データバインディングとは
データバインディングとは、UIとデータの間での双方向の同期を可能にする仕組みです。
ビュー内での状態変更が自動的にUIに反映され、逆にUI上での操作もデータの状態に反映されます。# `@State`について
`@State`は、ローカルな状態を管理するためのプロパティラッパーです。
ビュー内で状態を保持し、変更する際にUIが自動的に再描画されます。# `@State`の使い方
“`swift
struct CounterView: View {// カウンターの値を管理する状態。初期値は0
@State private var count = 0
git hooksを使用して、git commit前に何がしかの処理を実行する
`git commit`前に諸々の処理を実行するのは、テンポが悪くなるため、実際にやるかどうかは要検討かと思います。
その上で備忘録として記事を残します。### 最終的にやりたいこと
`git commit`実行前にfastlaneでテストを実行する
→[git hooksをトリガにしてfastlaneからユニットテストを実行する](https://qiita.com/wtrmiya/items/5adc97ca1c3dd1c7d311)### この記事で記載していること
`git commit`実行前に何がしかの処理を実行する### 前提
– ターミナルから`git commit`を実行してコミットする### 本題
https://git-scm.com/book/ja/v2/Git-%E3%81%AE%E3%82%AB%E3%82%B9%E3%82%BF%E3%83%9E%E3%82%A4%E3%82%BA-Git-%E3%83%95%E3%83%83%E3%82%AF
を参照すると、“`
フックスクリプトを有効にするには、Gitディレクトリの `hooks
【Swift】割り算の商と余りが欲しい!!
# はじめに
私の今までの知識を使って実装します。“`swift
let q = 10 / 3
let r = 10 % 3print(“商: \(q), 余り: \(r)”) // 商: 3, 余り: 1
“`まぁ悪くないですが、もっといい方法がありました。
# 実装
“`swift
import Foundationlet (q, r) = 10.quotientAndRemainder(dividingBy: 3)
print(“商: \(q), 余り: \(r)”) // 商: 3, 余り: 1
“`# おわり
Swift知識が増えました# 公式ドキュメント
https://developer.apple.com/documentation/swift/int/quotientandremainder(dividingby:)
homebrew install時にwarningが出る’Warning: /opt/homebrew/bin is not in your PATH.’
# 今回の問題
homebrewインストールするために以下コマンドを打ったがwarningが表示されてしまう
“`zsh
/bin/bash -c “$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)”
“`途中までは成功かと思われたが出力の途中でWarningが表示された
エラー内容一部抜粋
“`zsh
Warning: /opt/homebrew/bin is not in your PATH.
“`# 対策
パスが通ってないのでパスを通してあげる
以下コマンドを打てば良い。
“`zsh
export PATH=”$PATH:/opt/homebrew/bin”
“`その後以下のコマンドでバージョンが表示されればOK
“`
brew –version
“`
【TCA】UIKitでStateの変更をトラッキングするobserve(_:)メソッドの仕組み
# はじめに
TCA 1.7.0でObservationフレームワークが導入され、SwiftUIビューではViewStoreを使う必要がなくなるなど実装方法が劇的に変わりました。
UIKit側にも変更があり、Stateの変更をトラッキングするための新しい仕組みが導入されています。本記事では、まず1.7.0で新しく導入された[observe(_:)](https://github.com/pointfreeco/swift-composable-architecture/blob/1.7.0/Sources/ComposableArchitecture/UIKit/NSObject%2BObservation.swift#L141)メソッドの使い方について解説し、その後`observe(_:)`メソッドがどのようにStateの変更のトラッキングを行っているのかを解説します。
# 1.7.0以前の実装方法
1.7.0以前では、以下のように`Store.publisher`または`ViewStore.publisher`をサブスクライブすることで状態の更新を検知していました。“`
【SwiftUI】SFSymbolsのアニメーションはSFSymbolsアプリを活用しよう
# はじめに
iOS17から`symbolEffect`を使用してSFSymbolsにアニメーションをつけることができるようになりました。
しかし、指定の方法が結構難しいです。“`swift
.symbolEffect(.pulse.wholeSymbol)
“`こんな感じで、連なって指定しなければいけないので、いろんなパターンがあり、ビルドして確認するのは大変です。
そんな問題を解決するのが、SFSymbolsのアプリです。
ボタンでポチポチ設定していくだけで、`.pulse.wholeSymbol`ここの部分を生成してくれます。# やりかた
① 使用したいSymbolを選択します。
![スクリーンショット 2024-02-04 22.15.30.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1745371/af51ecf8-9b2e-617b-cdf8-51369893bbe1.png)② セグメントコントロールで再生ボタンを選択します。
![スクリーンショット 2024-02