- 1. 【iOS】Sign in with apple 初回以降のサインインでユーザー情報を取得できない
- 2. XcodeでARkitを使って3DオブジェクトをAR空間に配置する
- 3. インターフェースに最適化する人
- 4. Compose MultiplatformでいつものQiitaビューアを作ってみた
- 5. Dynamic Islandにアニメーション(風のパラパラ漫画)を表示
- 6. iOSアプリのリサインに失敗しないために気をつけること
- 7. [Swift] Objective-Cのcompletionをasyncで呼ぶ機能はexecutorを引き継ぐ
- 8. 【SwiftUI】3Dマップと2Dマップを切り替える(iOS17)
- 9. Xcode でのコメントアウトの仕方まとめ
- 10. 会社の旅行を最高に楽しくするためにアプリ作った
- 11. 【iOS】新規プロジェクトにSPMマルチモジュールを採用する際の手順書
- 12. [Swift] isolatedなasync functionからnon-isolatedなasync functionを呼び出した時は必ずActorから出る
- 13. [Swift] VaporをDockerでビルドしようとするとインクリメンタルビルドが無効になる件
- 14. SwiftUIで一覧画面から詳細画面へ遷移後、データを更新して一覧画面に戻るとちゃんと更新されたデータが反映される実装例
- 15. [iOS] サウンド再生時のバックグラウンド音声のコントロール方法
- 16. 【Xcode】runtime profile not found using “System” match policy Download the com.apple.CoreSimulator.SimRuntime.iOS-x-x simulator runtime from the Xcode Settings.
- 17. Blazor wasmがiOSで動かない時の解決方法
- 18. 【ios 17】アクセシビリティ機能の拡張と向上
- 19. No such module ‘FirebaseCore’を解決した話
- 20. 爆速CoreData
【iOS】Sign in with apple 初回以降のサインインでユーザー情報を取得できない
# 状況
SwiftUIにて、Signin with Appleのトライしていたところ、初回サインインではユーザー名やemailを取得できたのですが、それ以降のサインイン後はnilが返ってくるという現象が起きました。調べた結果を備忘録として書いておきます。# 試したコード
こんなコードで試しました。
“`swift: AuthScreen.swift
struct AuthScreen: View {
@State var givenName: String?
@State var familyName: String?
@State var email: String?var body: some View {
VStack {
Text(“givenName: \(givenName ?? “is nil”)”)
Text(“familyName: \(familyName ?? “is nil”)”)
Text(“email: \(email
XcodeでARkitを使って3DオブジェクトをAR空間に配置する
# やりたい事
Xcodeで開発したARkitを実機ビルドし、実機でAR空間に3Dオブジェクトを配置する
とりあえず初歩的な内容でデフォルトコードを公開。少し中身をいじって遊んでみる
(初期で配置されるオブジェクトを球体に変更)# 環境
| デバイス | 環境 | 備考 |
|:-:|:-:|:-:|
| Mac | Ver 13.6.1 | macos Ventura |
| Xcode | 15.0.1 | 公式からダウンロード |
| ios| 16.6 | |# Xcode立ち上げてプロジェクト作成する
1:Create New Projectでプロジェクト作成
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/645607/75ae4473-80c9-a826-9c98-170cbec08f46.png)
2:Augmented Reality Appを選択しNextで作成
![image.png](https://qiita-image-
インターフェースに最適化する人
## インターフェースとはなにか?
わたしは中学生向けの英和辞典をもっているので、それを元に話をしたい。
インターフェースとは、表面に施された工夫・装飾のことだ。(英和辞典を開かず適当にそれっぽいことを書いた虚言家です。)## インターフェースに最適化するとは?
誰にでも使える優れたデザインをユニーバーサルデザインなどと総称するらしい。
賞もある。
わたしの頭の中のドーラが「(その賞)欲しい!!」と叫んでいるが、ユニバーサルデザインで賞をもらうなど蛮族のわたしには途方もない宝である。
諦めよう。優れたデザインというのは、iOSアプリに限らずだが、細かな説明無しに見てわかることが、良いとされている。
画面上に、ボタンがボタンとわかるように、最適なサイズかつ最適な位置で配置されていることは、設計側も消費者側にとっても優れたデザインであると言える。## 優れたインターフェースへの最適化とは?
私達の身の回りには、優れたインターフェースが溢れかえっている。
全て先人たちの叡智のなせる技だ。
しかし、ここにひとつ、ここまで読み終えた人が「それは問題ですか?」と思うような、自己矛盾的な
Compose MultiplatformでいつものQiitaビューアを作ってみた
この記事は[NTTテクノクロス Advent Calendar 2023 シリーズ1](https://qiita.com/advent-calendar/2023/ntt-tx)の2日目です。
こんにちは、NTTテクノクロスの戸部@etctaroと申します。
普段は社内でモバイルアプリ開発関連の技術支援や社内向けのノウハウ記事執筆、社内研修講師活動、社内コミュニティ活動などを行なっています。
毎年恒例のアドカレですが、今年も私はComposeで記事を一本を書きました。
今回のお題は「Compose Multiplatform」です。
★ところで、記事の前に宣伝です。
先日まで開催されていた技術書典15では当社の仲間と書籍を出しています。
今回私が執筆した本は以下の通り。– [ゼロから始めるFlutterアプリ開発入門 2023.11版](https://techbookfest.org/product/5925951072370688)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazon
Dynamic Islandにアニメーション(風のパラパラ漫画)を表示
[qnote Advent Calendar 2023](https://qiita.com/advent-calendar/2023/qnote) の2日目です。
## はじめに
iPhone14ProからDynamic Islandが搭載されてiPhone15では全機種に搭載されています。※Dynamic Islandはこんな感じ
![38f1a46c5b3ab31bb0e23574e3d87669.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/149731/f4ef76d8-f02d-4048-82bb-837aef13fc94.png)iPhone15に変えてDynamic Islandがあるので何かできないかと思っていたらMacのステータスバーに[Runcat](https://kyome.io/runcat/)なるものがあるのを思い出し似たようなものを表示させたり常駐できないかなと模索してそれっぽいものができたので記事にしました。
## 出来上がったもの
![DynamicIsl
iOSアプリのリサインに失敗しないために気をつけること
この記事は[スタンバイ Advent Calendar 2023](https://qiita.com/advent-calendar/2023/stanby “Advent Calendar 2023”)の2日目の記事です。
昨日は、[@weno](https://qiita.com/weno)さんの記事でした。# リサインに至る経緯
私は2023年12月現在、求人検索サービスを展開するスタンバイでQAグループに所属しています。
今年、dev版iOSアプリのipaファイルをリサイン(resign、リザイン、再署名)する機会に遭遇しました。リサインはアプリを改竄する行為となりますので、自社アプリのアップデートなどの動作検証の目的だけで実施しましょう。
プログラマティックなQAスタッフはそう多くないはず、とは思いますが、リサイン自体は簡単なプログラムで動きますので、存在を知っていると、いざというときに役立つかもしれません。(たいてい、いざというときは来ないものなんですけどね。。。)
今回の目標は、リサインの罠にハマらず、スタイリッシュにリサインすることです。
リサインの泥濘み
[Swift] Objective-Cのcompletionをasyncで呼ぶ機能はexecutorを引き継ぐ
# 事前知識
## Objective-Cのcompletionをasyncで呼ぶ機能https://developer.apple.com/documentation/swift/calling-objective-c-apis-asynchronously
https://github.com/apple/swift-evolution/blob/main/proposals/0297-concurrency-objc.md
“`objc
– (void)signData:(NSData *)signData
withSecureElementPass:(PKSecureElementPass *)secureElementPass
completion:(void (^)(NSData *signedData, NSData *signature, NSError *error))completion;
“`のようにObjective-Cで定義されたcompletion handler付きのメソッドを
“`swift
@objc func si
【SwiftUI】3Dマップと2Dマップを切り替える(iOS17)
# はじめに
iOS17のMapKitに関する記事をいくつか書きました。
新規のはまだまだあるので記事にしていきます。今回は3Dと2Dの切り替えです。
# サンプルアプリ
![Simulator Screen Recording – iPhone 15 – 2023-12-01 at 22.28.25.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1745371/9bb742cb-3d08-50d2-6481-ca0af686743c.gif)# 実装
“`swift
import SwiftUI
import MapKitstruct ContentView: View {
// 東京駅の座標
@State private var position: MapCameraPosition = .region(.init(
center: .init(latitude: 35.681236, longitude: 139.767125),
s
Xcode でのコメントアウトの仕方まとめ
# はじめに
この記事は iOS Advent Calendar 2023 2 日目の記事になります。
ここでは Xcode のコメントの書き方についてまとめていきます。
## なぜコメント?
コメントを笑うものはコメントに泣きます。
# 行単位のコメント
行単位のコメントは、コメントをしたい箇所に `//` をつけてコメントを書きます。
“`swift
// ここにコメントを書く
func hoge() {
“`# ブロックコメント
複数行のコメントを書く際、まとめて書いた方が読みやすくなります。
その場合、ブロックコメントを使うと良いでしょう。
ブロックコメントは、`/*` と `*/` でコメントを囲むことによって、複数行のコメントを書くことができます。“`swift
/*
ここに
複数行の
コメントを書く
*/
func hoge() {
“`# Document Items
これらのコメントは、コードの読みやすさを向上させ、開発プロセスを効率化するために役立ちます。
特に、大きなプロジェクトやチームでの作業において、これらのコ
会社の旅行を最高に楽しくするためにアプリ作った
# 挨拶
TDCソフトのアドベントカレンダー2023年の1日目を飾らせていただく佐藤です!よろしくお願いします!# はじめに
先日会社のイベントとして部の旅行があり、その際旅行を盛り上げる要素としてiOSアプリを開発しました。
そこで、この記事では開発したアプリについて記載していきます。
(旅行先はマザー牧場です。)# アプリの目的
– 参加者が旅行先でのコンテンツをアプリを通して楽しんでいただく
– 参加者同士で思い出の共有ができる# アプリを使用することによる狙い
旅行先がマザー牧場ということで、マザー牧場にいる動物と触れ合ったり、バンジー・ジップライン等のアクティビティ、マザー牧場内のイベントを参加者に楽しんでいただく予定でした。
その際、マザー牧場にあるコンテンツにプラスして、アプリを使用することでより楽しいコンテンツにする狙いでアプリの開発を行いました。# アプリの概要
– 幹事の定めたお題に沿った写真を撮影し、アプリに投稿する。
– (お題の例:うさぎの写真を撮る、バンジージャンプに挑戦する、こぶたのレースで1位を当てるetc…)
–
【iOS】新規プロジェクトにSPMマルチモジュールを採用する際の手順書
## 目的
SPMマルチモジュール化の手順を整理すること
備忘録## ゴール
以下のような、`SPMマルチモジュール構成`を採用したプロジェクトを作れるようになること
## 前提
SwiftUIベースの`初期プロジェクト`作成
今回は初期プロジェクトを`SPMViewTranslation`とします## 手順
### パッケージを生成 (1/4)
– [ ] パッケージ用のフォルダを作成 (`SPMViewTranslationPckage`)
– [ ] フォルダをパッケージ化“`.bash
$ cd ~~~~/SPMViewTranslation
$ ls
SPMViewTranslation.xcodeproj SPMViewTranslationUITests
SPMViewTran
[Swift] isolatedなasync functionからnon-isolatedなasync functionを呼び出した時は必ずActorから出る
# TL;DR
**Swift5.7以降では**
“`swift
@MainActor
func isolatedFunc() async {
await nonIsolatedFunc()
}func nonIsolatedFunc() async {
// ここはMainActorではない
}
“`**Swift5.6以前では**
“`swift
@MainActor
func isolatedFunc() async {
await nonIsolatedFunc()
}func nonIsolatedFunc() async {
// ここはMainActor
…try? await Task.sleep(nanoseconds: 100)
// ここはMainActorではない
…
}
“`参考
https://github.com/apple/swift-evolution/blob/main/proposals/0338-clarify-execu
[Swift] VaporをDockerでビルドしようとするとインクリメンタルビルドが無効になる件
最近いろいろあってVaporに入門しているのですが、Dockerでビルドしようとするとインクリメンタルビルドが無効になって、ビルド時間が余計にかかってしまうという問題が発生しました。
Dockerコンテナは起動する度に、ファイルシステム上のファイルが新しい作成日時、最終変更日時などのメタデータを取得してしまい、Swiftのコンパイラがファイルがすべて変更されたと認識してしまうため、インクリメンタルビルドが無効になるみたいです。
どうやら解決策があるようなので、忘れないように記事にします。
# 解決法
Dockerfileにあるswift packageコマンドを使っているRUN命令すべてに以下の文字を添えることでキャッシュされたものが使われるようになります。“`
–mount=type=cache,target=/build/.build
“`全体のDockerfileはこのようになりました。
“`Dockerfile
# ================================
# Build image
# =====================
SwiftUIで一覧画面から詳細画面へ遷移後、データを更新して一覧画面に戻るとちゃんと更新されたデータが反映される実装例
[株式会社Never](https://neverjp.com/)のshoheiです。
株式会社Neverは「NEVER STOP CREATE 作りつづけること」をビジョンに掲げ、理想を実現するためにプロダクトを作り続ける組織です。モバイルアプリケーションの受託開発、技術支援、コンサルティングを行っております。アプリ開発のご依頼や開発面でのお困りの際はお気楽にお問合せください。
https://neverjp.com/contact/弊社のアプリ開発は`Flutter`を利用していますが、PJによってはiOSネイティブで開発しています。そこで得た知見を共有します。
本記事は新しい発見とかではないですが、誰かの悩みを解決できるものであれば幸いです。
# 概要
メモアプリ等でよくある、一覧画面から詳細画面へ遷移後、データを更新して一覧画面に戻るとちゃんと更新されたデータが反映される実装例を紹介します。
今回紹介するコードはこちらにまとめてます。
https://github.com/never-inc/iOSAdventCalendar2023# 実装例のアプリ
一
[iOS] サウンド再生時のバックグラウンド音声のコントロール方法
# はじめに
動画を再生する画面の実装にあたり、バックグラウンドで流している音楽等のサウンドに干渉した場合の調整方法に調べました。# 環境
Xcode15# 内容
アプリのバックグラウンド再生されているオーディオのコントロールには、`AVAudioSession`を使うことで実現できる。`AVAudioSession`でiOSのオーディオセッションの管理ができ、アプリがどのようにオーディオを扱うかをシステムに伝えることができる。
“`swift
import AVFoundationfunc configureAudioSession() {
let audioSession = AVAudioSession.sharedInstance()
do {
try audioSession.setCategory(.playback, mode: .default)
try audioSession.setActive(true)
} catch {
print(“Audio Session con
【Xcode】runtime profile not found using “System” match policy Download the com.apple.CoreSimulator.SimRuntime.iOS-x-x simulator runtime from the Xcode Settings.
# はじめに
シュミレーターが使えなくなる問題に遭遇したので記録しておきます。https://x.com/SNQ2001/status/1730123989975171171?s=20
# 状況
シュミレーターで実行すると以下のようなエラーが出る![スクリーンショット 2023-11-30 16.17.19.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1745371/f56c699a-0723-d3e3-9f0d-1b6c080b99bc.png)
全てのシュミレーターで発生するわけではない
# それっぽい記事
ただ、あんまり情報がなかった
https://developer.apple.com/forums/thread/708544# 解決方法
① 「Manage Run Destinations…」を選択します。
![スクリーンショット 2023-11-30 22.02.57.png](https://qiita-image-store.s3.ap-northeast-1.
Blazor wasmがiOSで動かない時の解決方法
## TL;DR
*index.html* ファイル内の “`“` の前に “`“` を入れることで解決## この問題について
### 問題発生条件
– OS: iOS
– ブラウザ: Safari, Chrome, Opera (検証したブラウザ全部)![エラー画像](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2769460/07447608-10d4-c987-643a-9b0d4a4a32f5.png)
↑のようなエラーが発生し、画面が読み込まれない
(このスクリーンショットではロードがされているが、実際はロードが98%ぐらいのところで止まっているため、サイドバーや文字は表示されない)### 解決方法
“`プロジェクト名/wwwroot/index.html“` を以下のように編集する
“`diff_html
<
【ios 17】アクセシビリティ機能の拡張と向上
## バイブレーションとホームボタンのアクセシビリティ設定
### 概要
バイブレーションやホームボタンのアクセシビリティ設定がios 17で拡充されました。これにより、ユーザーはより快適にデバイスを操作できるようになります。### バイブレーションの設定
バイブレーションの設定は、ユーザーがデバイスの振動に対して感じる強さやパターンを調整することができます。具体的な設定方法は以下の通りです。“`swift
// バイブレーションの強さの設定
uidevice.current.isproximitymonitoringenabled = true// バイブレーションのパターンの設定
audioservicesplaysystemsoundwithvibration(vibrationpattern, -1)
“`上記のコードを使用することで、ユーザーは自分に合ったバイブレーション設定を行うことができます。また、バイブレーションの強さやパターンはアプリ内で動的に変更することも可能です。
### ホームボタンのアクセシビリティ設定
ホームボタンのアクセシビリティ設
No such module ‘FirebaseCore’を解決した話
検証のためにFirebaseをiOSプロジェクトに導入しようとしていたところ、
「Apple アプリへの Firebase の追加手順 4.初期化コードの追加」
で以下のようなエラーが出た。`No such module ‘FirebaseCore’`
このエラーが出た時にそのまま検索しても回答が出ていなかったが、以下のように手順を踏むことで解決できた。
TARGETS>APP NAME>Frameworks,Libraries,and Embedded Content
の+ボタンをクリックし、使用するサービスを選択して追加することで解消する。今回の検証ではAnalyticsとCrashlyticsを検証する想定であったため、以下のように該当サービスを追加したところ、無事エラーが消えた。
![スクリーンショット 2023-11-30 1.36.38.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/412789/49799468-0c8f-7d76-5d13-b33ea0246f81.png)
爆速CoreData
## はじめに
こんにちは、watnowのアドベントカレンダー初日を担当させていただきます。
よろしくお願いします!
記事を書くのは2回目なのでかなり拙い文章となっております、ご了承ください。:bow_tone1:そしてこの記事は、
##### いち早くCoreDataを使いたい!!そんな人向けの記事になっているので詳しいことは個人的に分かり易いなと思った記事を貼っておくので詳しくはそちらで学習してもらえればと思います。
では本題に移ります。## CoreDataってなに?(爆速)
CoreDataは、ローカルにデータを保存、取得などをするためのCocoaFrameWorkに搭載されたO\RマッパーのことでありDB自体はSQLiteを使っています。:::note info
O\Rマッパー
O\RマッパーとはオブジェクトとRDBをつなぐ橋渡しのようなもの
通常プログラムでインスタンスの値を保存するSQL文などを生成するコードを書かなければいけないが、O\Rマッパーはあらかじめ設定しておいた対応関係から自動でデータベースの対応するテーブルに書き出しや逆にデータを