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

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

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フォルダの中に
再生したい音声データをアップロードします。
下記キャプ

元記事を表示

BitriseのmacOSスタックにGoogle Cloud SDKをインストールして使う

普段Bitriseを使ってiOSアプリのCIをしていて、ビルド成果物をGoogle Cloud Storageにアップロードしたりしています。

Google Cloud Storageとやり取りするには`gcloud`や`gsutil`といったコマンド群を含むGoogle Cloud SDKが必要なのですが、残念ながらmacOSスタックにはインストールされていません。

Xcode14.2 macOS Venturaのスタック情報はこちら。
https://github.com/bitrise-io/bitrise.io/blob/master/system_reports/MACOS/M1/osx-xcode-14.2.x-ventura.log

本記事では、macOSスタックにGoogle Cloud SDKをインストール&キャッシュして、次回以降のビルドですぐにコマンドを使えるようにする方法をご紹介します。

# Google Cloud SDKのインストール&キャッシュ
ワークフローにScriptステップを追加し、以下のスクリプトを入れておきます。

“`bash
#!/

元記事を表示

SwiftUIのMap()で地図表示

# Map()で地図を表示する 

![Map.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3127198/01d58db2-e1cc-783a-ea4a-22ec625a1f26.gif)
swiftUIに対応したMapKiyフレームワークを使って地図を表示する方法を解説してみます。MapKitを使って地図を表示するMap()がSwiftUIに追加され、手軽に地図表示ができるようになりました。それではMap()を使ってのやり方を見てみましょう。 

### Map()を使って地図を表示 
“`swift:qiita.rb
import SwiftUI
import MapKit

struct ContentView: View {
// 座標と領域を指定する
@State var region = MKCoordinateRegion(
center: CLLocationCoordinate2D(
latitude: 35.6805

元記事を表示

Flutterとはなんぞや?

目次

[はじめに](#はじめに)
[自己紹介](#自己紹介)
[私の今知っている知識](#私の今知っている知識)
[そもそもFlutterとは…?](#そもそもFlutterとは…?)
[Dartとはなんぞや](#Dartとはなんぞや)
[記事を書きながら得た知識](#記事を書きながら得た知識)
[まとめ](#まとめ)

はじめに

Flutterとはなんぞや?
ということで、なんでしょうか、最近良くネットでFlutterという単語を聞きますがいったいなんのことがわかっていません。
ということで、少し調べてみようということで記事を投稿してみました。

それではいってみよう!

###
自己紹介

経験1年半ほど。
現在開発案件に参画中。
私は、Java Spring 少々。Python経験1年ほど(Selenium)で構成されています。

###
私の今知っている知識

– AndroidやiOSの開発をどちらともできるらしい
– 「Dart」というものが関係しているらしい
– Windowsではビルドできない

全く知りません。ということで、これからグーグル先生を

元記事を表示

【SwiftUI】macOSアプリで保存機能を作成する

# はじめに
最近、Macアプリを作っているのですが、保存機能を作成しようと思った時にやり方がわからなかったので記録しておきます。

# サンプルアプリ
![画面収録_2023-02-09_23_05_34_AdobeExpress.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1745371/20d241f6-bc0e-01de-8af9-be52e8e82f44.gif)

# ファイルへのアクセス権を付与
① プロジェクトを選択します
② ターゲットを選択します
③ 「Signing & Capabilities」を選択します
④ 「File Access Type」の「User Selected File」のピッカーを選択します
![スクリーンショット 2023-02-09 23.14.01.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1745371/ab79ed0a-800e-3e88-6a72-755a82

元記事を表示

C言語でGrand Central Dispatch(GCD)を使ってみた(その1)

# 本記事について
macOS、iOS、watchOS、tvOSのマルチコアハードウェアにおいて配列でタスクを実行させるための技術、Grand Central Dispatch(GCD)の理解を深めるため、敢えてC言語縛りで使ってみました。
 (嘘です…本当はまだObject-CやSwiftをあまり使ったことがないからです…)

# 実行環境
・macOS Ventura 13.0.1
・Apple clang version 14.0.0 (clang-1400.0.29.202) 
・lldb-1400.0.38.17
・MacBook Pro 13インチ M2
 ※Homebrew GCCは使えなかったです…

# サンプルソース
5秒周期でログを10回出力するソースです。
“`
1 #include
2 #include
3 #include
4
5 int main(v

元記事を表示

OTHERカテゴリの最新記事