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

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

RuntimeError – [Xcodeproj] Unknown object version

## エラー内容
いつものようにターミナルで「**podinit**」を実行したところ、**RuntimeError – [Xcodeproj] Unknown object version**というエラーが発生

## 解決方法
**xcodeproj**というものをインストールすればいいらしいので以下のコマンドを実行してみました。
“`terminal:command
gem install xcodeproj
“`
しかしまたもエラー発生、、、 :disappointed_relieved:
**FilePermissionError**だと、、、
“`terminal
ERROR: While executing gem … (Gem::FilePermissionError)
You don’t have write permissions for the /Library/Ruby/Gems/2.6.0 directory.
“`
色々調べた結果、sudoを頭につけたら無事うまくいきました!!

“`terminal:command
sudo g

元記事を表示

URLの構造をさらっとおさらいしつつ、部分的に抽出する方法

## はじめに
URLの構造を判定して適切な処理をする、みたいなときに役立つことを簡単にまとめる。

## 対象者
この記事は下記のような人を対象にしている。

– プログラミング初学者

## URLの構造
・個人的にはこの図がわ分かりやすいと思っている。[このサイト](https://www.asobou.co.jp/blog/web/url-optimisation)を参照してみてください。
![スクリーンショット 2023-02-17 23.11.57.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2915639/29f7c76b-e514-fb37-43f5-ece08dea56d1.png)

## URLの構造を部分的に抽出する

“`swift:Swift
//元となるURL
let url = URL(string: “https://qiita.com/search?q=swift+ios”)

//プロトコル(scheme)の摘出
print(“出力:\(url?.scheme

元記事を表示

SwiftUIのAppStorage、UserDefaultsについて

# **1.UserDefaultsについて**

[Apple公式のUserDefaults](https://developer.apple.com/documentation/foundation/userdefaults)については、以下のように記載されています。
“`
An interface to the user’s defaults database, where you store key-value pairs persistently across launches of your app.
“`
つまり翻訳すると、UserDefaultsはキーと値のペアを永続的に保存することができるインターフェースなのですという意味になります。
UserDefaultsを利用することによって、簡単にデータを保存、参照したりできます。
永続的にデータを保存すると言っても、アプリを削除した場合データは削除されます。

# **2.データの保存方法について**
どんなオブジェクトでも保存可能です。

“`swift
UserDefaults.standard.set(value

元記事を表示

iOSアプリにQRコードを実装する方法(ひと工夫付き)

QRコードはURLやユーザーIDなどを共有するのに便利な手段の一つで、カメラが搭載されているスマートフォンとは特に相性のいいものでもあります。今回はiOSアプリにQRコードを実装する方法とより便利に使うためのひと工夫を紹介します。

# 満たすべき要件

アプリにQRコードの導入を行うにはどのような機能が必要なのでしょうか。ほとんどの場合は以下の2つの条件を満たしておく必要があります。

– QRコード生成機能
– カメラによる読み取り機能

アプリの目的によっては追加する項目も考えられますが、この記事ではまずこれらを可能にすることを念頭において進めていきます。

# QRコード生成機能

## 実装について

これはアプリ内でユーザーが指定したIDなどの文字列をQRコードとして生成する機能です。他の要件に比べると複雑そうに見えますが、実はライブラリなどを導入せずとも実装する事が可能です。シンプルなものでは以下の記事などが参考になりました。

– [How to Create QR Codes in Swift [2022 Guide] | CodeX](https://medium.

元記事を表示

【Swift】WebViewに表示されない問題

# はじめに
WebViewを使っていて、表示できないサイトがありました。
原因を調べると`https`ではなく`http`だからでした。
`http`でも表示できるようにしたので記録しておきます。

WebViewはこちらのコードを使用しています。

https://qiita.com/SNQ-2001/items/d86685481b4697e81e38

# コード
“`swift
import SwiftUI

struct ContentView: View {
private let url = URL(string: “http://www.chiseki.go.jp/”)
var body: some View {
WebView(url: url)
.frame(width: UIScreen.main.bounds.width, height: UIScreen.main.bounds.height)
}
}
“`

何も設定していないと真っ白の画面になってしまいます。

# 解決方法
① プロジェ

元記事を表示

@StateでdidSetは使うな。 (SwiftUI)

## 内容
`@State`のpropertyの変更を検知するときは、didSetを使ってはいけない。[onChange(of:perform:)](https://developer.apple.com/documentation/swiftui/list/onchange(of:perform:))を使え。という話です。

## きっかけ
[swift-developers-japan](https://swiftdevelopers.jp/)で
`@State`にdidSetを書いちゃダメという記事を見たが自分で実際に書いたらdidSetが呼ばれた。本当にダメなのか?
という趣旨の質問があり、あまり理解できていなかったので調べた。

## なぜ`@State`でdidSetを使ってはいけないか
`@State`のdidSetは呼ばれないことがある。
いつ呼ばれていつ呼ばれないかというと、
“`swift
@State var num: Int
@Binding var binding: Int
_binding = $num
“`
で定義されているとして
“`swift
n

元記事を表示

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

## 概要
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`
・アシスタントエディタの表示

# ボタンの追加とセグエで画面遷移

・画面に部品の追加を行うために`コマンド+シフト+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)

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

元記事を表示

OTHERカテゴリの最新記事