iOS関連のことを調べてみた2022年04月20日

iOS関連のことを調べてみた2022年04月20日

行動のログを取りたい! ~ 友人と早起きチャレンジ with iOSのショートカット

## はじめに
[前記事](https://qiita.com/Beef/items/b7dad88869999359cb9a)にて、自分の行動を GAS を使って記録するアイデアを述べました。今回は GAS の他に iOS のショートカットを使う方法を検討してみました。全部を一気に書き出すとまとまりがなくなるので、今回はその一部です。ちなみに、現在は [Toggl Track](https://toggl.com/track/) なるアプリと自前で作成した行動記録ファイル、どちらが使い勝手がいいかを検討中です。すでに大概の車輪はできているんですよね。すごい。
### 早起きチャレンジとは
早起きして一日を生産的に使おうと、友人と協力して早起きチャレンジをしています。
規定の時間までに、Slack で起床報告をすれば OK 。忘れれば、Starbucks を相手にプレゼントという企画です。

ただこの「 Slack を立ち上げ、挨拶を入力し、送信する」のが(友人には悪いのですが)手間に感じていました。そこで、iOS のショートカットアプリを利用して上記(+ α)のショートカットを作った

元記事を表示

SwiftUI Tutorial の応用2

## 内容
– SwiftUI Tutorial の応用2

## 開発環境
### ハードウエア
|項目||
|—|—|
|PC| MacBook Air(M1,2020) メモリ:16GB ストレージ:1TB |
|実機 | iPhoneSE(2nd Generation 128GB iOS 15.3.1) |
|PCと実機を接続する|[USB-C Digital AV Multiportアダプタ](https://www.apple.com/jp/shop/product/MUF82ZA/A/usb-c-digital-av-multiport%E3%82%A2%E3%83%80%E3%83%97%E3%82%BF)|

### ソフトウエア
|項目||
|—|—|
|言語|Swift 5.5.2|
|IDE|Xcode Ver 13.2.1|
|その他|Visual Studio Code Ver 1.64.2|

### バージョン管理
[GitHub – 実際にコードを確認できます](https://github.com/tanakadaichi1989/M

元記事を表示

SwiftUIでAppStoreカードを表示する

# AppStoreカードとは何か?
正式な名前が分からないので勝手に名前を付けさせてもらいました!
(多分正式名称は「SKOverlay」だと思います。)
まだ浸透してないと思うので検索に引っかかるようにタイトルはそのままにしておきます笑


これです!

これをSwiftUIで実装していこうと思います。

# 実装
“`ContentView.swift
import SwiftUI
import StoreKit

struct ContentView:

元記事を表示

UITextFieldの中の文字をサイズによって可変にする

# 前提条件
UITextFieldが左右の制約により適切に突っ張っていること。

# バージョンによってやり方が異なる
## iOS13より前のバージョン
`_placeholder.adjustsFontSizeToFitWidth`をUITextFieldに以下のように設定するとプレイスホルダーを含めた文字が小さく表示されます。
![スクリーンショット 2020-11-11 17.29.33.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/171702/5cb0a317-f30a-e676-d245-bcd2fecfe3d5.png)

Min Font Sizeを設定
![スクリーンショット 2020-11-11 17.39.29.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/171702/bda7d072-e845-6304-f7c2-ce80d1a59044.png)

## iOS13移行
https://d

元記事を表示

複数のオンラインカレンダーを、ミスなく事故らず使いたい

## はじめに

これまで、2つのドメインのGoogleカレンダー(以下`gcal`)を、連携して使用していました。あくまでも目的は「予定の見落としによる事故(=ダブルブッキング)を起こさず、平和なカレンダー生活を送る」です。

設定の詳細は、[GoogleWorkspaceのカレンダーについて、ドメインをまたいだ共有を、なるべく便利に(じぶんのイメージと合うように)した](https://qiita.com/hann-solo/items/3edb03ecdf05ce35aaa1) に書きました。

ざくっとまとめると

– macOSではブラウザでカレンダーを扱う
– `gcal-A`がメインで、`gcal-Z`は補助的な役割とする
– iOSは、`gcal-A`を見に行く

となっていました。こうして平和なカレンダー生活

元記事を表示

SwiftUIで困ったら「UIViewRepresentable」

# はじめに
2019年6月3日にSwiftUIが発表されてから2年と10ヶ月経ちました。
しかし、未だにSwiftUIにはできない事が多くあります。
そうした理由からUIKitからの移行が進んでいません。

「どっちか1つなんて選べないよ〜」

SwiftUIにできない事はUIKitにやってもらえば良くない?という事です。
そこで登場するのが「UIViewRepresentable」です。

今回はUIViewRepresentableを使ってUIKitをSwiftUIで使えるようにしていこうと思います。

# UILabel
“`Swift
struct LabelView: UIViewRepresentable {
let text: String
func makeUIView(context: Context) -> UILabel {
let uiLabel = UILabel()
uiLabel.setContentHuggingPriority(.defaultHigh, for: .vertical)

元記事を表示

[iOS][Swift5.5]async/awaitを使った通信処理のサンプル実装

# URLSession
Foundation.URLSessionにasync/awaitを利用した関数が用意されているのでそれを活用する
“`swift
公式ドキュメントから引用
/// Convenience method to load data using an URL, creates and resumes an URLSessionDataTask internally.
///
/// – Parameter url: The URL for which to load data.
/// – Parameter delegate: Task-specific delegate.
/// – Returns: Data and response.
public func data(from url: URL, delegate: URLSessionTaskDelegate? = nil) async throws -> (Data, URLResponse)
“`

“`swift
let (da

元記事を表示

ReSwiftでRedux DevToolsを動かす

[ReSwift](https://github.com/ReSwift/ReSwift)と[Redux DevTools](https://github.com/reduxjs/redux-devtools)を連携させる方法のメモです。

![スクリーンショット 2022-04-18 9.07.27.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/36771/f25239cd-8df4-e365-f080-a767060e6648.png)

大きくは以下の3Stepになります。

1. ReSwiftMonitorをインストールする
1. redux-devtoolsをインストールする
1. ツールを起動してモニタする

## ReSwiftMonitorをインストールする

Redux DevToolsと連携するプラグイン [ReSwiftMonitor](https://github.com/t-osawa-009/ReSwiftMonitor) が公開されている。
CocoaPodsなりでインス

元記事を表示

ハッカソンから始まってiOSアプリ、Androidアプリをリリースするまでの軌跡

**@kenmaro**です。
普段は主に**秘密計算、準同型暗号などの記事について投稿しています**。
秘密計算に関連するまとめの記事に関しては以下をご覧ください。

> – [秘密計算エンジニアを始めて2年半が経った。](https://qiita.com/kenmaro/items/48059dd60f79e80f5ef8)
> – [秘密計算エンジニアを始めて3年が経った。](https://qiita.com/kenmaro/items/a1d90a074d552b7bf886)

## 忙しい人のために最初に宣伝
**この度我々が個人開発する「YorimichiApp」はAndroid版を正式リリースしました。**

アンドロイドユーザの方は、ぜひこちらからアプリをダウンロードしてみてください。

https://play.google.com/store/apps/details?id=com.agrimetal.yorimichi2

また、iOSユーザの方でまだダウンロードしていない人は、ぜひこちらからどうぞ。

https://apps.apple.com/jp/

元記事を表示

未経験から独学で初めてアプリをリリースした件について

# はじめに
##### 前職で美容師をしていた私が独学で初めてAppStoreにアプリをリリースしました!
※温かい目でご覧いただければ幸いです。

https://apps.apple.com/jp/app/beautystory/id1593645808

# アプリについて

##### SNS形式のヘアカタログアプリです。
通常ヘアカタログアプリといえば画像ですが、こちらのアプリは動画となっております。
TikTok、Instagramのリール、YouTubeのショートのような感じで閲覧できます。
機能はざっくり言うと、ログイン機能、動画撮影機能、楽曲検索機能、楽曲合成機能、投稿機能、シェア機能、スタイル検索機能、検索機能、動画閲覧機能、プロフィール編集機能、アカウント編集機能、お問い合わせ機能、通知機能です。

### なぜこのアプリを開発したのか

コロナの流行に伴い顧客が激減してしまい美容業界全体が苦しい状況だった為、少しでも手助けができればと考えたことがきっかけです。ヘアカタログアプリを開発しなくても既に有名なヘアカタログサイトはありますが、値引き前提で美容室側に負担

元記事を表示

iPhone の safari で2回目以降の window.open できない → できた!

# したいこと

親画面から子画面のポップアップをしたい。

子画面が無ければ新規で起動し、あればそれをアクティブにする。
(つまり開く子画面は1つのみであり、無限増殖しない。)

# 困った現象

ほとんどのブラウザは以下の方法でOKだったはずですが・・・

親画面
“`html:old1.html





旧 親画面


旧 親画面

元記事を表示

便利なExtension(Color編)

# Color
“`Color+.swift
// iOS
extension Color {
// Color -> UIColor
func toUIColor() -> UIColor {
if let components = self.cgColor?.components {
return UIColor(displayP3Red: components[0], green: components[1], blue: components[2], alpha: components[3])
} else {
return UIColor(displayP3Red: 0.0, green: 0.0, blue: 0.0, alpha: 0.0)
}
}
// Color -> RGB
func toRGB() -> (red: CGFloat, green: CGFloat, blue: CGFloat) {
if let

元記事を表示

Combine(Swift)に関しての特に参考になった知見

### スレッドについて
https://qiita.com/shiz/items/9dc8e9a96f399b6c7246

` .receive(on: DispatchQueue.main)`を用いるとメインスレッドで受けれるので良さそうである。
`.receive(on: RunLoop.main)`は、スクロール中に止まるらしい(Timerがスクロール中に止まるのと同じく)

### UIControlをCombineで購読したい

デフォルトで用意されているものはない。

CombineCocoaを利用すればできる模様。
[UIKitでもCombineしたい!を叶えるCombineCocoaを試してみる](https://dev.classmethod.jp/articles/combinecocoa/)
[もしUIKitでUIを作りCombineで非同期処理を行うなら絶対にCombineCocoaの導入を検討するべきではないだろうか](https://emoshu.co.jp/blog/archives/18)
[CombineCommunity/CombineCocoa

元記事を表示

iPhone初期化時のiOSバージョンに関する知見

# 初期化方法
iPhoneには次の2通りの初期化方法がある。

* iTunesを使用して初期化
* iPhoneの端末をリセット

# iTunesを使用して初期化の場合
リセット後にiOSバージョンは最新のOSのバージョンに更新されてしまう。
例) iOS(14.8.1)の端末を初期化 → iOS(最新の15.4(2022年4月時点))として初期化された状態になる
※こちらの情報は実際に試したわけではなく、ネット上の記事より得た情報のため、間違い補足あればコメント歓迎します。

# iPhoneの端末をリセット
こちらはiTunesストアには接続せず、iPhoneのリセットメニューから初期化した場合です。
工場出荷状態に戻すと言われていますが、iOSバージョンは例外のようで、
リセット後であってもOSバージョンはリセット前のままです。
例) iOS(14.8.1)の端末を初期化 → iOS(14.8.1)として初期化された状態になる
(当然ながらアプリは全て初期化されています)
※こちらは私のiPhone 6s Plus(iOS 14.8.1)端末を検体にした、実体験です。

元記事を表示

イベント通知~オブザーバパターン~

# イベント通知とは
イベントの発生箇所となるオブジェクトが、他のオブジェクトにイベントの発生を伝えること。

イベント・・・アプリケーション内で発生するあらゆる事象のこと。
# イベント通知のパターン
・デリゲートパターン
・クロージャ
・オブザーバパターン
# オブザーバパターン
##### できること
1対多のイベント通知
-> ex) 特定のオブジェクトが変更されたタイミングで、複数の画面が更新されるケース
##### 構成要素
・サブジェクト >>> オブザーバを管理し、通知を発行する
・オブザーバ >>> 通知を受け取る対象
##### デメリット
むやみに多用すると、どのタイミングで通知が発生するか予想しづらくなり、処理を追うのが難しくなってしまう。
# 実装方法
1: 通知を受け取るオブジェクトにNotification型の値を引数に持つメソッドを実装する
2: NotificationCenterクラスに通知を受け取るオブジェクトを登録する
3: NotificationCenterクラスに通知を投稿する

example)
“`Swift: Hoge.swift

元記事を表示

UbuntuにAltServer for Linuxをインストールする時のメモ

# 概要
これは筆者が[AltServer for Linux(非公式)](https://github.com/NyaMisty/AltServer-Linux)をコンパイルした時のメモです。
私が実行した時はAltServer-Linuxをコンパイルする時にエラーが発生して成功しませんでしたが、メモとして残します。
環境はUbuntu Server 21.04 for Raspberry Piです。
この記事はUbuntuの基本的なコマンドが理解出来る人向けに書いています。
(危険な事はしていませんが)何が起こっても自己責任で実行してください。
もしかしたら日本語や説明がおかしいところがあるかも知れないです。ご了承ください。
この記事に書かれているのは[作者さんの説明](https://github.com/NyaMisty/AltServer-Linux#build-instruction)を和訳、Ubuntu向け&自分向けにしたものです

## 1 必須パッケージのダウンロード
### 1 APTコマンドでダウンロード出来るパッケージをダウンロードする。
~~~
sudo ap

元記事を表示

Flutter – iOSアプリでライセンスplistを半自動で生成して設定画面に表示できるライブラリを作りました

# Dart, Flutterで車輪の再開発をしてみました
Swiftでは @mono0926 さんが作った [LicensePlist](https://github.com/mono0926/LicensePlist/) がありますが、Flutterを使ったiOSアプリでは同等のライブラリが存在しなかったので、Dartで作成してみました。

@mono0926 さんの該当記事はこちら

https://qiita.com/mono0926/items/973752b69c881e00c507#comment-3060a817c4ba199567b9

今回作成したライブラリの置き場所はこちらです。
今回はiOSのみの対応でAndroidは対応できてないです。今後対応する予定はありますが、いい感じの実装方法が思い浮かんでないので、誰か助言を…。

https://github.com/nomunomu0504/dart_license_plist

https://pub.dev/packages/dart_license_plist

動作結果としては、License

元記事を表示

画面表示と共に、キーボードを表示する方法

# はじめに
SwiftUIで画面遷移をした際に、キーボードを自動で表示する方法をメモしておきます。
## コード
“`swift
import SwiftUI

struct ContentView: View {
// ContentView ⇄ SecondViewのシートを管理する状態変数
@State var isShowSheet: Bool = false

var body: some View {
VStack{
Button{
isShowSheet.toggle()
}label: {
Text(“Go SecondView”)
}
}
.sheet(isPresented: $isShowSheet) {
SecondView(isShowSheet: $isShowSheet)
}
}
}

struct

元記事を表示

[SwiftUI] 可読性にパラメータを全振りした SFReadableSymbols という OSS を作った話。

## Tl;Dr
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/29653/c8b5bc97-bde8-08d9-597a-1dccdb89944c.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/29653/d56307fc-cc92-bb59-c471-8324af747b3b.png)

https://github.com/YusukeHosonuma/SFReadableSymbols

## なぜ作ったの?

## vs 標準API

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/29653/2a83

元記事を表示

[SwiftUI] PreferenceKeyを使用して下位Viewから上位Viewへ値を伝える

どうも、モバイルエンジニアのEtsuwoです。

SwiftUIを使ってる中で、親Viewから子Viewや孫Viewのframeへアクセスしたい場合がありました。
その際PreferenceKeyという仕組みを使用すると非常に便利だったので記事にします。

# 1. PreferenceKeyとは
PreferenceKeyは下位のViewからより上位の階層のViewへと値を渡す仕組みです。
これを使うことにより、下位Viewで起こったframeの変更などを上位Viewで取得できるようになります。
二階層以上離れていても取得することができるので、Viewを細かく作りたい場合などに便利です。

# 2. 実装してみる

今回は親、子、孫の3つのViewを作り親Viewで孫ViewのFrameを取得する場合を実装してみます。
以下のように中央の黒い長方形のFrameを表示できたら完成です。

![スクリーンショット 2022-04-11 23.43.51.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/383

元記事を表示

OTHERカテゴリの最新記事