- 1. 【swift】 Autolayout-基礎編-
- 2. 【SwiftUI】1番下までスクロールしたら同意ボタンが押せるようになる機能を実装したい
- 3. BlueskyにiPhoneのミュージックで再生している曲をiOSショートカットで投稿する
- 4. React Native WebViewの基本的な機能とAPIの活用方法
- 5. 【iOS】iOSアプリのローカライズ方法
- 6. 【SwiftUI】ScrollViewの範囲を超えてもコンテンツを表示する
- 7. オフラインのスマホ(iOS)でPythonを動かす
- 8. 【iOS】Skipを使ってみた
- 9. Flutter(Dart)からGeminiを簡単に呼べるようになったので試してみる
- 10. FlutterアプリをiOSエミュレーターで起動する
- 11. 【Xcode】Xcode内にドキュメントを簡易表示する
- 12. 【SwiftUI】@State がない カスタム ViewModifier を無邪気に View extension にしていいのだろうか謎
- 13. iOSアプリの配信国を指定する
- 14. 【RxSwift】1回で効率よくイベントを流すshare()
- 15. ラーメン店検索アプリをFlutterで初めてリリースした話(Flutter×Google Maps API)
- 16. Swift Style Guide リンク集
- 17. 【TCA】Task.yieldを使ってCPU負荷の高い処理を効率的に実行する
- 18. 【Swift】人の名前を扱う
- 19. ビューを非表示にする方法の使い分け(SwiftUI)
- 20. リアルタイムカメラ加工アプリを作る【Swift】【AVFoundation】
【swift】 Autolayout-基礎編-
## AutoLayoutとは
XcodeのStoryboard上で配置したパーツが異なる端末で違う見え方をする場合があります
画面の大きさが端末によって異なるため、各パーツの大きさや余白の設定が不十分な場合に発生するためです💡
|iPhoneSEで起動した時|iPhone13ProMaxで起動した時|
|—|—|
|![SE.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/483508/5fafe692-fd35-4c4a-4304-6ded8b17f51b.jpeg)|![13Promax.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/483508/415ef7dc-9fe8-b339-9b68-2cb2cefe52b5.jpeg)|(画像はhttps://qiita.com/naoking21/items/08932587b9fdb337b3df より引用)
AutoLayout(制約)を利用して各パー
【SwiftUI】1番下までスクロールしたら同意ボタンが押せるようになる機能を実装したい
# はじめに
SNS系のアプリで利用規約に同意させる画面が出ると思います。
利用規約を最後までスクロールしないと同意が押せないようなUIをよくみます。
それを再現してみます。# サンプルアプリ
![Simulator Screen Recording – iPhone 15 Pro – 2024-02-24 at 22.20.58.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1745371/95c91e32-303e-93e5-65e5-3d97cb99344d.gif)# 実装
“`swift
import SwiftUIstruct ContentView: View {
@State private var scrolledToBottom = false
@State private var isAgreement = falsevar body: some View {
VStack {
ScrollV
BlueskyにiPhoneのミュージックで再生している曲をiOSショートカットで投稿する
タイトルのショートカットが完成したので、投稿します
# 前準備
まずは、BlueskyのiOSアプリの左上のハンバーガーメニューを開きます。設定→高度な設定→アプリパスワードを開きます。
![IMG_2239.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/263486/4d399fec-3b1b-c48a-0db8-d98880c968f4.png)
アプリパスワードを追加します。
![IMG_2240.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/263486/dc7fbea0-6177-4d26-42bd-9fc674d59f85.png)
ここで出力されたアプリパスワードは一度しか表示されません。メモ帳などにコピペしておきましょう。
# TextのみのNowplayingショートカット作成
以下のように入力します。
![スクリーンショット 2024-02-24 21.21.13.png](https://qiit
React Native WebViewの基本的な機能とAPIの活用方法
## はじめに
ReactNativeでWebViewを扱う場面があったので、公式ドキュメントを参考に簡単な機能を理解していきます。以下の公式のAPI Referenceを参考に進めていきます。### React Native WebView API Reference
https://github.com/react-native-webview/react-native-webview/blob/master/docs/Reference.md
## 内容
今回はこちらのライブラリーを使用します。
https://github.com/react-native-webview/react-native-webview
### インポート
“`js
import { WebView } from “react-native-webview”;
“`### useRefを用いる
WebViewのAPIのメソッドを用いるためには、`useRef`を使用する必要があります。使用することによって、WebViewのAPIのメソッドの参照が可能となります。“`js
【iOS】iOSアプリのローカライズ方法
# はじめに
こんにちは。
iOS開発の一環として、アプリのローカライズ方法について学んだので、その手順を共有したいと思います。# 実装前の準備
まず実装を始める前に以下の手順を行います。
1. Infoを選択してLocalizationsに使用する言語を「+」をクリックして追加する
1. File > New > File…を選択してStrings Fileを選択しLocalizable.stringsを作成する
1. 作成したLocalizable.stringsをクリックしてUtilityAreaからLocalizationボタンをクリックして言語を確定させる
1. 2と3を言語分作成する# 設定アプリの言語変更によりローカライズ対応を行う(StoryBoard)
StoryBoardで作成している人向けです。
設定アプリで言語変更を行いその変更に伴い言語を変わるようにするときは以下の対応を行います
1. storyboardにカーソルを合わせてUtilityAreaにあるLocalizationの設定言語にチェックを入れる
1. Main.strings(チェック入
【SwiftUI】ScrollViewの範囲を超えてもコンテンツを表示する
# はじめに
iOS17から`scrollClipDisabled`というものが追加されました。
ある時とない時の動きの違いを記録しておきます。# サンプルアプリ
![Simulator Screen Recording – iPhone 15 Pro – 2024-02-23 at 23.03.08.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1745371/68c2bd37-de19-1ef4-0714-f636c201570d.gif)# 実装
“`swift
import SwiftUIstruct ContentView: View {
var body: some View {
VStack(spacing: 0) {
Rectangle()
.fill(Material.regular)
.zIndex(1) // ScrollViewより高くすることで、Scro
オフラインのスマホ(iOS)でPythonを動かす
## 概要
個人情報をサーバーに送らずにデータ分析したいといった要望はままあります。
また、分析するコードをPythonで開発後に、Swiftに移植するのはかなり手間です。
ソリューションとしてオフラインでPythonを実行できないか以前に調べた内容を紹介します。https://github.com/pyodide/pyodide/discussions/2188
これはPyodideをWebkitから実行する方法です。
将来的には[wasmer/python](https://wasmer.io/python/python)で直接実行できることでしょう。
ちなみに上記ディスカッションのotmbは私の個人アカウントです。## 環境構築
適当にPyodideの最新版を引っ張ってきます。
“`
$ curl -LO https://github.com/pyodide/pyodide/releases/download/0.26.0a2/pyodide-core-0.26.0a2.tar.bz2
$ tar xvjf pyodide-core-0.26.0a2.tar.b
【iOS】Skipを使ってみた
# はじめに
みなさん[Skip](https://skip.tools/)というツールはご存知でしょうか。
SwiftのコードをKotlinにトランスパイルして、Androidのアプリも同時に作れるツールです。
[Github](https://github.com/skiptools/skip)
この記事ではSkipの導入から簡単なアプリを作成し、iOS/Androidのシュミレーターでビルドするところまでをご紹介します。
:::note warn
注意
Skipをインストールしてから14日間の試用期間は無料です。
それ以降は有料になるらしいですが、まだ価格は発表されていません。
[価格ページ](https://skip.tools/pricing/)
[説明文](https://skip.tools/docs/lice
Flutter(Dart)からGeminiを簡単に呼べるようになったので試してみる
## 動機
Dart3.0のアップデート記事をどこかで見たから。
## 本題
Googleの発表したAI Bard改めGemini を利用するためのパッケージ[google_generative_ai](https://pub.dev/packages/google_generative_ai) を触ってみる。
## サンプルを動かしてみる
### GeminiでAPIキー取得する
1. [Google AI Studio](https://ai.google.dev/tutorials/ai-studio_quickstart?hl=ja)を有効にする
法人アカウントの場合、早期アクセスアプリの有効化が必要。
Core Data Access Permissionsの許可が必要。
2. APIキーをCreateする
余談だが、[Gemini](https://gemini.google.com/?hl=ja)(本家)に聞いても教えてくれる。
### Flutterでアプリを起動する
“`bash
% git clone git@github.
FlutterアプリをiOSエミュレーターで起動する
## 動機
起動手順だけメモ的に書いておく。
(同じ記事は星の数ほどある。)
## 本題
“` bash
# Flutterプロジェクトを作成する
% fvm flutter create flutter-playground –verbose
“`“`bash
# iOSエミュレーターを起動する
# 今回はiPhone 15(iOS 17.0)を選択
% open -a Simulator# Flutterの認識しているエミュレーターを探す
% fvm flutter devices
Found 3 connected devices:
iPhone 15 (mobile) • 1625B704-06DE-46E3-B905-2294D4E16509 • ios • com.apple.CoreSimulator.SimRuntime.iOS-17-0 (simulator)
macOS (desktop) • macos • darwin-arm64 • m
【Xcode】Xcode内にドキュメントを簡易表示する
# はじめに
プロジェクトが大きくなってくると、ドキュメントを見ないとどのような処理をしているのかわからないものもでてくる可能性があります。そんな時、定義元に行かずとも、ドキュメントを閲覧できたらいいですよね。
使用側でドキュメントを簡易表示する方法を紹介します。
以下のような関数があり、このドキュメントを見たいとします。
![スクリーンショット 2024-02-22 22.18.14.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1745371/d283062d-bb83-4d08-aeca-ca5a85caca3a.png)
# やりかた1
① ドキュメントを表示したい関数を右クリックします。
② 「Show Quick Help」を押します。![スクリーンショット 2024-02-22 22.23.16.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1745371/194d0717-4dfd-d8f
【SwiftUI】@State がない カスタム ViewModifier を無邪気に View extension にしていいのだろうか謎
WWDC2022 SwiftUI の QA 抜粋です。
“`
What’s the difference between a custom ViewModifier vs View extensionQ: What’s the difference between a custom ViewModifier (without DynamicProperty) that uses some built-in modifiers in body(content:), and a custom View extension func that just use those built-in modifiers?
Similarly, what’s the difference between a custom ViewModifier with some DynamicProperty and a custom View with some DynamicProperty (also has a @ViewBuilder content property to receive co
iOSアプリの配信国を指定する
アプリの配信国はデフォルトでは全ての国配信されるようになっていますが、今はGDPR設定でデータの自己使用について同意を求める必要があります。
# GDPRについての記事
・GDPR(EU一般データ保護規則)とは?マーケティング担当者が対応すべき事項について
https://www.onemarketing.jp/contents/gdpr_re/
・GDPR罰金まとめ(2023年1月時点)
https://acompany.tech/privacytechlab/gdpr-fine/
・GDPR設定データの自己使用について同意を求める
https://support.google.com/admob/answer/10305345?hl=ja
・AdMobのGDPR対応
https://zenn.dev/iiinaiii/scraps/c3355353839c4a
・EU加盟国
https://www.mofa.go.jp/mofaj/area/eu/map_00.html
なのでAdMob
【RxSwift】1回で効率よくイベントを流すshare()
# 目次
[1.share()とは](#1-share()とは)
[2.実例](#2-実例)
[3.おわりに](#3-おわりに)# 1. share()とは
ひとことで言うと`1回でイベントを流せる機能`です。
つまりは、`1度subscribeしたものはもう2度とsubscribeしなくてOKな機能+1度でイベントを流し切る機能`です。
どう言うことか、実例を挙げてみていきます。
# 2. 実例
## `share()`を使わない例
まずは`share()`を使わずに書いてみます。(超非効率)
~~~swift: hasnoshare.swift
let subject = PublishSubject()
let observable = subject
.debug(“observable”)observable
.bind(to: Binder(self) { _, value in
print(“サブスクライバー1: \(value)”)
})
.disposed(by: bag)// 1回目のイベントを発行
subject.on
ラーメン店検索アプリをFlutterで初めてリリースした話(Flutter×Google Maps API)
# はじめに
先日、Flutterを用いて念願の**自作アプリをAppStoreにて公開**しました!
初心者が開発を進めていく上で色々と知見を得たので、同じようにアプリ開発をやってみたい、という初心者の方向けに記事を書こうと思います。
正直私が何か新しいことを見つけました!みたいなことはほぼ無くて、基本的にここ参考にしたよ!っていう情報の受け売りだらけになってしまうのですが、それでも無いよりはマシかと思って執筆します。あと僕自身がこういう記事に非常にお世話になったので。
この記事が技術的な知見としてはもちろん、開発のモチベーションとしてでも良いので、少しでも誰かの役に立てば幸いです。### この記事でわかること
– Flutterでの制作において参考にさせていただいた記事やサービス
– Flutter開発における、初心者におすすめの方法
– 開発における注意点・後悔### この記事では省いたこと
– Flutterって何?みたいな説明(もっと分かりやすい記事が山ほどあるので)
– 具体的なFlutterプロジェクトの作成方法
– アプリ制作後に実際にストアに公
Swift Style Guide リンク集
# Swift Style Guide リンク集
## ~~いつもの~~ Swift.org
* [API Design Guidelines](https://www.swift.org/documentation/api-design-guidelines/)
## Swift Style Guide
* [Google](https://google.github.io/swift/)
* [Airbnb](https://github.com/airbnb/swift)
* [Kodeco](https://github.com/kodecocodes/swift-style-guide)
* [LinkedIn](https://github.com/linkedin/swift-style-guide)
* [Eureka](https://github.com/eure/swift-style-guide)古い・メンテされてなさそう
* [GitHub](https://github.com/
【TCA】Task.yieldを使ってCPU負荷の高い処理を効率的に実行する
# はじめに
TCAの[Performance](https://pointfreeco.github.io/swift-composable-architecture/main/documentation/composablearchitecture/performance#CPU-intensive-calculations)に関するドキュメント内で、`Task.yield()`というAPIを使用したCPU負荷対策の例が挙げられていました。今まで`Task.yield()`を使ったことが無く、ドキュメントを読んでも何をしているのかいまいちわからなかったので調べてみました。
# Task.yield
`Task.yield()`は現在のタスクをサスペンドし、同じスレッドで別のタスクを実行できるようにするためのAPIです。以下のコードを見てください。
最初に無限ループするタスクを100個生成し、その後「Hello, world!」と出力するタスクを生成します。
プログラムの実行が終了しないように、最後に`while true {}`でメインスレッドをブロックしています。`
【Swift】人の名前を扱う
# はじめに
`PersonNameComponents`というものを知りました。`DateComponents`のように人の名前を管理できるようです。
めっちゃ便利そうなので基本的な使い方を記録しておきます。# イニシャライザはこんな感じ
本記事で登場してもらうのは、「山田ルーカス太郎3世」です。
あだ名は「タロー」です。“`swift
var personNameComponents = PersonNameComponents(
namePrefix: “Mr.”, /* Mr., Mrs., Ms.など */
givenName: “太郎”, /* 名前 */
middleName: “ルーカス”, /* ミドルネーム */
familyName: “山田”, /* 苗字 */
nameSuffix: “3世”, /* Sr., Jr., I, II, IIIなど */
nickname: “タロー”, /* ニックネーム */
phoneticRepresentation: nil /* 受信機の音声表現名ビューを非表示にする方法の使い分け(SwiftUI)
## はじめに
ビューを非表示にする方法はいくつかあり、どれを採用すればいいかの判断に迷うことがあったのでまとめました。
## 環境
– OS: macOS Sonoma 14.2.1 (23C71)
– Swift: 5.9.2## 結論
先に結論です。
– トルツメ [^torutsume] → `if` や `switch`
– トルママ [^torumama]
– 常に非表示(レイアウトのためだけに配置する) → `hidden()`
– 条件によって表示/非表示を切り換える → `opacity(condition ? 1 : 0)`[^torutsume]: 取って詰めること。
[^torumama]: 取っても詰めずにそのままとすること。## 検証
簡単なコードで検証しました。
“`swift:ContentView.swift
import SwiftUIstruct ContentView: View {
var body: some View {
VStack(spacing: 16) {リアルタイムカメラ加工アプリを作る【Swift】【AVFoundation】
# カメラ→加工→動画保存
![Feb-03-2024 03-15-35.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/235259/66b2329b-069c-dd3e-dca8-07ee879c814f.gif)
カメラからの一枚一枚のフレームに任意の加工をして動画として書き込む方法です。
(Core ML でアニメ風の画像にする処理を例とします)AVCaptureSession でカメラフレームを取得
↓
フレームを加工
↓
AVAssetWriter に流し込むという手順で動画にします。
# 手順
### infoPlist でアプリでカメラとマイクの使用許可設定
“`info.plist
Privacy – Camera Usage Description
Privacy – Microphone Usage Description
“`### プロパティ
これらを使います。“`swift
// capture
private var captureSessio関連する記事
OTHERカテゴリの最新記事
-
- 2024.09.19
iOS関連のことを調べてみた
-
- 2024.09.19
JavaScript関連のことを調べてみた
-
- 2024.09.19
JAVA関連のことを調べてみた
-
- 2024.09.19
Rails関連のことを調べてみた
-
- 2024.09.19
Lambda関連のことを調べてみた
-
- 2024.09.19
Python関連のことを調べてみた