iOS関連のことを調べてみた2023年02月15日

iOS関連のことを調べてみた2023年02月15日

実機ビルド時に警告が出て、アプリ他上がるまで時間がかかった件【解決済み】

## 概要
XcodeでiPhoneの実機ビルドを行った際に、以下の警告文が発生して、アプリが立ち上がるまでに30秒ほどかかってしまいました。
**警告文**
**warning: libobjc.A.dylib is being read from process memory. This indicates that LLDB could not find the on-disk shared cache for this device. This will likely reduce debugging performance.**

日本語でざっくりと訳すと、
**ダイナミックライブラリは通常プロセスメモリから読み込みがされるが、この警告は、ライブラリが、ビルドされた実機内のディスクにキャッシュが見つからない。そのため、デバックの機能が著しく低下する可能性がある。**

とのことです。

dylibとは、**効率的にメモリを使用するために使用されるマッキントッシュのライブラリ**らしいです。
LLDBは、**ソフトウェアのデバッガーのこと**です。とりわけ今回の場合は、Xcod

元記事を表示

【SwiftUI】Labelを簡単に使えるように拡張する

# はじめに
SwiftUIのUIコンポーネントには複数の書き方があります。
例えばButtonだと以下のような書き方があります。

“`swift
Button {

} label: {

}
“`

“`swift
Button(“”) {

}
“`

2個目の書き方は`Text`を省略することができます。
Labelでも同じような書き方ができるように拡張します。

# 実装
“`swift
extension Label where Title == Text, Icon == Image {
init(_ title: T, icon: Image) {
self.init {
Text(title)
} icon: {
icon
}
}
}
“`

# 使い方
“`swift
Label(“このように書けることができます”, icon: Image(systemName: “volleyball.fil

元記事を表示

App Store ConnectでApp共有シークレットを入手する方法

# この記事を書くに至った理由
方法を調べたところ、情報が古く、UIが変更されていたため取得が困難であったから。

# 結論

App共有シークレットを取得したいアプリページに移動

「App情報」

「App用共有シークレット」

「管理」

元記事を表示

SwiftUIのViewがなぜか更新されないときは `id(_:)` を付与すると解決するかもしれない

以下のような、画像を取得するObservableObjectを `@StateObject` で保持している画像表示のViewを作成することがままあると思います。

“`swift
import SwiftUI

struct ImageView: View {
@StateObject var imageProvider = ImageProvider()
let url: URL

var body: some View {
ZStack {
if let image = imageProvider.image {
Image(uiImage: image)
.resizable()
.scaledToFit()
}
}
.frame(height: 300)
.onAppear {
imageProvider.

元記事を表示

iOSアプリの配信先の国を変更/指定する(開発者向け)

「app store connect 配信国 変更」とか「iOSアプリ 配信先 国 変更」とかでググっても全然出てこなかったし、めちゃくちゃ分かりずらかったから備忘録。

1. 「App Store Connect」にアクセス
2. 配信国を変更したいアプリを選択
3. 「価格および配信状況」の「価格表」でプルダウンから価格を選択
 ※これやらないと国選択できない
![スクリーンショット 2023-02-14 12.03.21.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/872351/dbcafd12-29f0-a02e-8e24-8ab35fa76a50.png)

4. 「配信可否」のとこにある「編集」
![スクリーンショット 2023-02-14 11.47.22.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/872351/4ca29795-a83b-8f8c-e912-81c641f6234d.pn

元記事を表示

Swift Package Managerだけで完結する機密情報などの環境変数を管理するFrameworkを作った話。

# はじめに
APIのアクセスキーなどの機密情報など設定値は、ソースコードにハードコードしたりInfo.plistに書き込んで利活用することは基本的には避けておくべきです。
そういった設定値が平文で混入した状態で、Github.com上のリポジトリなど社外のホスティング環境に対してCommitしてしまうと、Commit先のリポジトリがPrivateであっても第三者からの不正アクセスによって、Private Repository内から平文のAPI Keyが抜き出され、外部に漏洩してしまい悪用されてしまう可能性が生じます。

ipaファイルからリバースエンジニアリングを行いAPIKeyを抽出する可能性もあるため、完全なセキュアな状態とするのであれば、アプリそのものにAPIKeyなどの機密情報を埋め込まないことになります。
ただ、現実的にそんなことは運用上難しいため漏洩リスクを下げ、API側のアクセス制限などでカバーするのが一般的です。

# 従来、メジャーであった「cocoapods-keys」
アプリのコードと切り離して、機密情報の値を難読化して利用するために、Objective-Cの時

元記事を表示

SwiftPMでR.swiftを導入する

Swift Package Manager(SPM,SwiftPM)でR.swiftを導入する方法を紹介します。

[R.swift README](https://github.com/mac-cain13/R.swift#xcode-project—spm)

### 1. R.swiftをインストールする
Xcodeで直接設定する方法もありますが、Package.swiftで管理することをおすすめします。

– `Package.swift`の`dependencies`に依存関係を追加します
“`Package.swift
dependencies: [
.package(url: “https://github.com/mac-cain13/R.swift.git”, from: “7.2.4”)
],
“`
– ターゲットにつ依存関係とプラグインを追加します
“`Package.swift
dependencies: [
.package(url: “https://github.com/mac-cain13/R.swift.git”,

元記事を表示

Swift UI Property Wrapper(プロパティラッパ) まとめ

## Property Wrapperとは?
Property Wrapperとは一言でいうと、**SwiftUIが変数の状態を自動で監視してくれる仕組み**のことです。
Property Wrapperを使うことで、複数のViewで変数を共有したり、変数が更新されるとViewを再描画してくれます。

## State

1.プロパティが更新可能になる。
2.プロパティが変更されるとビューも同時に更新される。

解説
通常SwiftUIのビューは、Structの為プロパティを更新することができません。しかし、@Stateを付けることで更新が可能になります。
また、@Stateをつけたプロパティは、SwiftUIによって監視されている為、変更があればビューを自動的に再描画してくれます。

## Binding

1.別のビュー同士の変数を紐づける。

解説
Bindingは少しややこしいので、子ビューから親ビューの変数の値を変更する簡単なコードを使って説明します。

まず以下のような親ビューAと子ビューBがあるとします。

“`swift:sample
import SwiftUI

元記事を表示

【Swift】URLからタイトルを取得する

# はじめに
URLからWebサイトのタイトルを取得することがあり、実装したので記録しておきます。

# サンプルアプリ
![Simulator Screen Recording – iPhone 14 – 2023-02-13 at 22.21.21.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1745371/fa193c50-d9f9-edd1-615a-d108f4b47a24.gif)

# 実装
“`swift:ContentView
import SwiftUI

struct ContentView: View {
@StateObject var viewModel = ViewModel()
var body: some View {
VStack(spacing: 20) {
TextField(“URLを入力してください”, text: $viewModel.url, axis: .vertical)

元記事を表示

【SwiftUI】TextEditorにプレイスホルダーを付けたい

# はじめに
複数行の文字入力をさせたい時に登場するのが`TextEditor`です。
(iOS16からはTextFieldでもできるようになった)
しかし、`TextEditor`にはプレイスホルダーがつけられません。
プレイスホルダーがないと何をする場所なのかユーザーはわかりにくいと思います。

`TextEditor`にプレイスホルダーを付けなければいけないことがあったので、その時の解決方法を記録しておきます。

# こんな感じ
![Simulator Screen Recording – iPhone 14 – 2023-02-12 at 20.20.20.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1745371/a081cf87-a16b-7396-35e8-f22ac9cea648.gif)

# 実装
“`swift:TextEditorView
import SwiftUI

struct TextEditorView: View {

private let placeh

元記事を表示

xcode14(swift)に触れてみる

初めてxcodeに触れた際のメモとして記事に残そうと思います。
内容としてはxcodeで画面にボタンを作成し、画面遷移を行うレベルです。
xcodeのバージョンにより操作が違う部分があるようです。

環境
xcode14.1
swift

[開発者向け公式サイト(日本語)](https://developer.apple.com/jp/develop/)
[開発者向け公式サイト(英語)](https://developer.apple.com/)
# ボタンの追加とセグエで画面遷移

・画面に部品の追加を行うために`コマンド+シフト+L`でライブラリペインを表示する。
・buttonを検索し、ドラックアンドドロップで画面に配置する
・ダブルクリックでボタンの表示文字を変えることができる 

元記事を表示

【SwiftUI】Textに一部だけ背景色を付ける

# はじめに
`Text`内でスタイルを変えないといけない場面に遭遇して、こんな方法があるんだと思ったことがあったので記録しておきます。

# やりたいデザイン
テキストが折り返されても最初の行から始めたい(伝われ)
これは`HStack`では実現できません。
![simulator_screenshot_5AE81043-1425-4BDC-8827-9336376CC50F.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1745371/fcc5cbe9-6a31-9a08-9c61-e9223d69ff19.png)

# 実装方法
“`swift
import SwiftUI

struct ContentView: View {
var body: some View {
VStack(alignment: .leading, spacing: 10) {
Text(makeAttributedStringText(text: “重要 明日は面談

元記事を表示

Firebaseでproduction/staging環境を切り替えた

## 方針
Firebaseのプロジェクトをproduction/staging用でそれぞれ作る。
1つのプロジェクトの中に複数の環境に向けたFirestoreやAuthenticationは作れないため。

## やってみる
iOSで使っていたのでこのあたりの記事を参考にやりました。
[Firebaseを本番環境と開発環境で切り替えてみた(iOS)](https://qiita.com/ken_sasaki2/items/6f462d129a67bdd30a7e)

## 発生した問題
Google, Twitterのログインを入れているのだが、両ログインでエラーが出た。
– [URL Schemesの設定](https://firebase.google.com/docs/auth/ios/google-signin#2_implement_google_sign-in)を忘れていた。(Google, Twitterともに必要)
– Twitter Developerで環境ごとにappを登録するのを忘れていた

【Swift】重複しない綺麗な数列を作る

# はじめに
https://qiita.com/SNQ-2001/items/025de03a9f070c740610

保存機能を作成している際に、重複しないファイル名を付けるために書いたコードを記録しておきます。
もっといい方法があれば、コメントください!!

# やりかた
“`swift
let timeInterval = Int(Date.now.timeIntervalSince1970 * 100_000)
print(timeInterval.description) // 167602970162115
“`
![スクリーンショット 2023-02-10 20.48.41.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1745371/9c869945-612d-fdc6-5fd7-489d6a1b39b5.png)

# おわり
これ重複しないよな。。。?

元記事を表示

SearchBar付きのTableViewでセルタップ時に画面遷移させる時の注意点

SearchBar付きのTableViewでセルをタップ時画面遷移させる時、
検索モードだと画面遷移されず詰まったので解決策を共有します。

### ■セルタップで画面遷移する実装
“`swift
func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
let viewController = SelectViewController()
let navigationViewController = UINavigationController.init(rootViewController: viewController)
navigationViewController.modalTransitionStyle = .crossDissolve
navigationViewController.modalPresentationStyle = .fullScreen
self.present(navigationViewControlle

元記事を表示

CompositionalLayoutでiOS Music AppのUIを再現

## 完成品

CompositionalLayout組む際に毎回どう実装するんだっけ?となるケースが多く、[Appleのサンプルコード](https://developer.apple.com/documentation/uikit/views_and_controls/collection_views/implementing_modern_collection_views)も参考になるんですが、ちょっと足りない要素があるので自分のリファレンス用にMusicアプリのUIを再現してメモ

※UIのレイアウトの再現なのでアーキテクチャなどは適用せずにViewにベタ書きしています

### 異なるオブジェクトでのDiffable datasource
Diffable dataSouceを使用する際に異なる型を1つのData S

元記事を表示

Logの送信をやさしくしてくれるPuree

# Logの送信をやさしくしてくれるPuree

– logを収集するもので下記の機能をもつオープンソース。
– filter: ログに共通パラメーターを追加する
– buffer: バッファに入れる
– patch: 複数のログを1つにまとめて送る
– 現在はPuree-Swiftに移行されている模様。
– [githubページ](https://github.com/cookpad/puree-ios “puree-ios”)

![overview.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3123134/43733bc0-97b7-4b8d-9950-e7a8c163a7f1.png)

## インストール方法

“`Shell
pod “Puree”
“`

## 使い方

1. filter, outputなどの動きを定義するクラスを作る

“`Swift
class ActivityFilter: PURFilter {
overri

元記事を表示

Cannot debug widget extension in Xcode 14.1

Xcode 14.1はWidgetをデバッグできないらしい。

## 解決方法
1.Select app scheme and run on iOS device (don’t stop)
2.Select widget scheme and run on iOS (don’t stop)
3.So both the targets are running at the same time
4.Select widget scheme then Debug > Attach to Process > Select your widget target name On device / simulator add widget

## 参考
https://stackoverflow.com/a/74145087/6593486

元記事を表示

SwiftでL-System

## はじめに

[こちら](https://qiita.com/yukiny/items/7b5692b503fc7db921d4)の記事で紹介しました[SwiftyCreatives](https://github.com/yukiny0811/swifty-creatives)というSwift製のクリエイティブコーディングフレームワークを用いてL-Systemを実装していきます。

## L-Systemとは
L-Systemはフラクタル図形を描画するためのアルゴリズムです。プログラムの再帰性を用いて簡単にフラクタルが描画できるようになっています。

## 実装結果
![QuickTime Player – 画面収録 2023-02-10 1.53.14.mov 2023年-02月-10日 2.55.14.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/567236/99b4c224-2631-e532-d6bd-dc60749c7f86.gif)

## 実装
コードはとてもシンプルです。
実装方

元記事を表示

FlutterでFirebaseStorageに保存している音声ファイルを再生する

## この記事を書こうと思ったきっかけ
Flutterの自己学習でポケモン図鑑を作成してみようと思った際、
鳴き声を再生させる機能が欲しかったため自分なりに実装してみました!

## 前提条件
たくさんの方がFlutterでFirebaseの連携方法をわかりやすく書いてくださっているので
本記事では省略させて頂きます。
別途FirebaseStorageにどのようなフォルダ構造で自分が保存しているかは記載致します。
また音声ファイルを再生するためjust_audioもインポートします。
バージョンは下記になります。

“`
firebase_core: ^2.5.0
cloud_firestore: ^4.3.2
firebase_storage: ^11.0.11
just_audio: ^0.9.31
“`
## 1.FirebaseStorageに音声ファイルを保存
FirebaseのプロジェクトからStorageを選択しプロジェクトを開始します。
その後DLというフォルダを作成しDLフォルダの中に
再生したい音声データをアップロードします。
下記キャプ

元記事を表示

OTHERカテゴリの最新記事