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

iOS関連のことを調べてみた2022年11月29日
目次

【SwiftUI】iOS16で追加されたTableを使ってみた

# はじめに
iOS16でTableとTableColumnという機能が追加されていました。
気になったので使ってみました。

# 完成形
![simulator_screenshot_49C9D741-D7CB-4689-A43A-09F424546461.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1745371/a8f4a4be-793e-ebfb-b724-5f3d3259a7d8.png)

# 今回使用するModel
“`swift
struct SoccerPlayer: Identifiable {
let id = UUID()
let name: String
let age: Int
let position: SoccerPosition
}

enum SoccerPosition: String {
case gk = “GK”
case df = “DF”
case mf = “MF”
case fw =

元記事を表示

クロージャーのキャプチャをバリ簡単にまとめてみた#1

## はじめに
「クロージャ内」では「スコープ外」の変数や定数の値を参照し保持する機能がある。という一部の機能に関しての記事である。

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

– プログラミング初学者
– クロージャーを聞いたことがある人

## 詳細
1. 「クロージャー内」では「スコープ外」の変数や定数の値を参照し保持する機能がある。
2. (ちなみに)キャプチャするのは値のことではなく、スコープ外にあるキャプチャされた変数や定数自身をキャプチャする
“`swift:Swift
let greeting: (String) -> String

//doは新しくスコープを作る機能がある。
do {
//doスコープの中の定数symbol。そのため、本来、doスコープ外では値を参照できないはず。
let symbol = “!”

//定数greeting(クロージャーの型定義)はグローバル定数なためどこからでもアクセス可能
greeting = { user in
//ここに注目
//greeti

元記事を表示

iOS UIScene.willEnterForegroundNotificationやUIScene.didEnterBackgroundNotificationはアプリスイッチャーに行った・から戻った 時は呼ばれない

A. アプリをアプリスイッチャーに移しただけで端末のホーム画面まで行ってない時は、UIScene.didEnterBackgroundNotificationが呼ばれずUIScene.willDeactivateNotificationのみ呼ばれる。またアプリスイッチャーからアプリを前面に戻した時は、UIScene.willEnterForegroundNotificationが呼ばれずUIScene.didActivateNotificationのみ呼ばれる

-> そのため、UIScene.willEnterForegroundNotificationやUIScene.didEnterBackgroundNotificationを購読しているだけでは、うまく通知を受け取れないことに注意。

B. アプリをバックグラウンドまで戻し端末のホームまで戻ると、UIScene.didEnterBackgroundNotificationとUIScene.willDeactivateNotificationが両方呼ばれる。アプリを端末のホーム画面から全面に戻した時は、UISce

元記事を表示

VScodeでiOSアプリを開発する方法

# はじめに
XcodeでiOSアプリを開発していると、重くて困ることがあります。文字選択に時間がかかったり、スクロールしただけなのに待たされたり。これではまともに開発できません。そこで、VScodeでiOSアプリを開発できないかと思って調べていたところ、Xcodebuild Toolsという拡張機能を見つけました。

# Xcodebuild Tools
Xcodebuild Toolsは、VScodeからiOSアプリをビルドできるようにする拡張機能です。
https://marketplace.visualstudio.com/items?itemName=sterin.xcodebuild-tools

# 手順1: Xcodebuild Toolsをインストール
VScodeで「Xcodebuild Tools」を追加します。

# 手順2: ios-simをインストール
“`
npm install –global ios-sim
“`
これを使うと、アプリを起動せずにiOS シミュレーターにアプリをインストールできるようになります。
https://www.npmjs

元記事を表示

【Swift】いろんな型に対応した万能な編集画面を作りたかった

# はじめに
題名の通り。 
KeyPathを指定すると、型に応じて適切な編集画面を出してくれるSwifUIのViewを作りたかった。 
こんな感じの構造体があった時に
“`swift
struct Item {
var title: String
var count: Int
var color: UIColor
var date: Date?
}

var item = Item(
title: “こんにちは”,
count: 0,
color: .red,
date: Date()
)
“`

こんな感じで、itemとkeyPathを指定すると、適切な編集UIに振り分けてくれる感じ
“`swift
EditValueView(item, keyPath: \.title)
EditValueView(item, keyPath: \.count)
EditValueView(item, keyPath: \.color)
EditValueView(item, keyPath: \.date)
“`

元記事を表示

【SwiftUI】可変SFSymbolsを試してみた

# はじめに
SFSymbols4から部分的に色を変更できる機能が提供されました。
今回はそれを試してみます。

# サンプルアプリ
![Simulator Screen Recording – iPhone 14 – 2022-11-27 at 18.14.12.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1745371/bc9d8548-7fcb-3b60-7461-906f9550fe3b.gif)

# 実装
“`swift
import SwiftUI

struct ContentView: View {
@State var value: Double = 0.0
var body: some View {
VStack(spacing: 50) {
Image(systemName: “speaker.wave.3.fill”, variableValue: value)
.resizable()

元記事を表示

【SwiftUI】Menuのボタン順番について

# はじめに
意識したことがないとあまり気づかないと思うのですが、
`Menu`内のボタンの表示される順番は、
`Menu`の`label`に近い方向から順番に表示されます。

|||
|-|-|
|![スクリーンショット 2022-11-26 22.09.16.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1745371/70f5ed16-ec17-1345-23ad-42c65749724a.png)|![スクリーンショット 2022-11-26 22.09.24.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1745371/93465353-7186-5760-56ef-c014a490a5d7.png)|

どこに配置されていても上から表示されてほしい場合があります。
そんな時の解決方法を紹介しようと思います。

# 解決方法
“`diff_swift
import SwiftUI

struct Conten

元記事を表示

アプリ公開用テスト投稿

iOS アプリの公開のためにサイト準備

元記事を表示

Flutter入門 サイト

https://udemy.benesse.co.jp/development/app/flutter-intro.html

https://zenn.dev/kazutxt/books/flutter_practice_introduction/viewer/01_chapter0_aboutme

https://qiita.com/mkosuke/items/7957e71968aefc6558be

https://qiita.com/ekzemplaro/items/3c57e66460f76a664e87

元記事を表示

【SwiftUI】オフラインになったら画面を切り替える

# はじめに
Webの場合、インターネット接続がないと以下のような表示になります。
![スクリーンショット 2022-11-25 16.07.01.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1745371/6de8e1e2-b44f-76ff-80cb-4df74e55af20.png)

これをモバイルアプリでも再現したいと思います。

# サンプルアプリ
![RPReplay_Final1669361474_MP4_AdobeExpress.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1745371/ef6f4cd1-b1f5-91bd-1e16-ae79f8724bf3.gif)

# 実装
「[NWPathMonitor を Combine の Publisher として扱えるようにする拡張](https://gist.github.com/YusukeHosonuma/0a39266dd5c2232d6d

元記事を表示

【SwiftUI】iOS16から追加されたLabeledContentとは?

# はじめに
iOS16から`LabeledContent`というものが追加されていました。
`LabeledContent`って`Label`となにが違うのって思ったのでちょっと調べてみました。

# 違い
![Simulator Screen Shot – iPhone 14 – 2022-11-24 at 20.29.07.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1745371/bc659aa1-7495-560f-4944-58b8bd7352aa.png)

`LabeledContent`はUITableViewCellのAccessoryType的なことができる機能っぽいですかね。
ただ、AccessoryTypeより自由度が高そうです。

# 実装方法
## 基本形
Contentの中には何でもいれることができます。
“`swift
struct ContentView: View {
var body: some View {
LabeledConten

元記事を表示

画面遷移先に値を渡す

## 前提
Storyboard上でのSegueを設定するパターンとSegueなしの2パターンで解説してきます。
`ViewController`→`NextViewController`への値渡しという前提で進めていきます

# Segueあり
**簡単な流れ**
##### 1. Segueをつける
##### 2. SegueにIDをつける
##### 3. 遷移先に変数を用意する
##### 4. Segueで値を渡す

## 1. Storyboard上でSegueを設定する
controlを押しながら`ViewController`→`NextViewController`へ接続します
![スクリーンショット 2022-11-24 18.55.28.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2778525/e2c1d0c7-a996-8f5f-bb2d-cb967caf490c.png)

## 2. SegueにIDをつける
表示されたSegueをタップし、識別子を設定します
![

元記事を表示

Gitのブランチを切り替えただけなのに・・・(pods利用)

iOS開発中にgitのブランチを切り替えたら、エラーでいっぱいになった。

## 解決方法

1. プロジェクトフォルダ内のファイル・フォルダ Podfile.lock xxx.xcworkspace Pods を削除
1. xxxx.xcodeprojを開く
1. Podsファイルを削除
1. クリーン(↑ + comm + K)
1. xxxx.xcodeprojを閉じる
1. コマンドラインでpod install –repo-update
1. xxxx.xcworkspaceを開く
1. クリーン(↑ + comm + K)

環境とかに左右されるかもですが、podsを利用していて
ブランチを切り替えただけでビルドが通らなくなった場合は試してください。

元記事を表示

【Unity】Xcode14へのアップデート対応

## はじめに

macOSおよびXcodeは定期的にバージョンアップの必要があります。
今回、macOSのアップデートに伴いXcodeをXcode14にアップデートしたところ
コマンドラインからビルドする際に問題が発生したためその時の対応をまとめます。

## 環境

* macOS Monterey
* Unity 2019.4.26f1

## アプデ後に発生した問題

当環境ではiOSビルドをMac上でコマンドラインから行っているのですが
アプデ後、iOSアプリをArchiveしようとした際に

`does not contain bitcode.`とエラーがでてipaファイルが作成できなくなりました。

原因を調べたところ以下のような記事を発見。
>[iOSアプリのArchiveでdoes not contain bitcodeと言われる解決方法](https://qiita.com/pugiemonn/items/dd7c88205b72b3bcdb5a)
>[Xcode14からBitcodeオプションは非推奨になった](https://qiita.com/temoki/i

元記事を表示

【SwiftUI】一定時間操作がないことを検知する

# はじめに
PCの場合、一定時間操作がないとスクリーンセーバーが起動します。
そのような挙動を再現したかったのですが、公式のAPIにはなさそうだったので自作してみました。

# サンプルアプリ
色々迷った結果、このようなアプリにしました。
画面を放置していると画像を非表示にします。
![画面収録_2022-11-24_11_06_42_AdobeExpress.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1745371/3487c3c2-f3c8-2ea8-f16f-e900f66dbdd3.gif)

# 仕様
監視するスクリーンの範囲は`.onTimeout()`を付けているViewの大きさです。

# 実装
“`swift
import SwiftUI

public extension View {
func onTimeout(seconds: TimeInterval = 30, perform: ((ScreenStates) -> Void)?) -> some View

元記事を表示

通信スタブ化に利用できるOHHTTPStubsの公式ドキュメントが古い(iOS)

OHHTTPStubsの公式ドキュメントが古い (iOS)

HTTP通信をスタブ化するのに、OHHTTPStubsを使うことはよくあると思います。しかし、公式ドキュメントが古いです。コンパイルエラーを解消できずそのまま諦めた人も多いのでは?

結論

以下のような処理を
“`
import OHHTTPStubs

stub(condition: pathEndsWith(“/niwaka”)){
_ in
let data = “niwaka”.data(using: .utf8)!
return OHHTTPStubsResponse(data: data, statusCode:200, headers:nil)
}
“`

以下のように変更すると動きます。
“`
import OHHTTPStubs

stub(condition: pathEndsWith(“/n

元記事を表示

iphone で Date関数を使用すると NaN 表記になる件

## 結論

– `new Date()` は `{}`が返される。
– 現在時刻の年月日を計算に使いたい場合は、`new Date().getFullYear()`などで1つずつ地道に取得しなくてはならない。

“`js
// NG
new Date() // => なぜか {}

// OK
Date() // => “Wed Nov 23 2022 09:20:44 GMT+0900” ※ただしstr型

new Date().getFullYear() // => 2022
new Date().getMonth()+1 // => 11
new Date().getDate() // => 23
“`

## 動作環境

– 端末:iphone12mini
– ブラウザ:safari/chrome ver?
– react: 18.2.0

## 参考

iphone 上でコンソール出す方法については下記を参照しました

– https://laptopreneur.net/%E3%82%B9%E3%83%9E%E3%83%9B-%E3%82%B3%E3%83%

元記事を表示

バイナリ配布されているフレームワークをCocoaPodsで扱う

## やりたかったこと
時雨堂さんの[WebRTCビルド](https://github.com/shiguredo-webrtc-build/webrtc-build)のiOS用フレームワークのバイナリを使いたかったのですが、バイナリが数百MBもあり(アーキテクチャ絞ればもっと減りますが)、そのままリポジトリに登録したくなく、そのプロジェクトでパッケージ管理に使用している CocoaPods 管理でなんとかしたかった感じです。

## やったこと

### ローカルのpodspecを読ませたい

時雨堂さんはXcode用のフレームワークをtar.gzで固めてアップしてくれているので、podspecをうまいこと記述してやれば、CocoaPodsのパッケージとして扱え、`pod install`のときに直接バイナリをダウンロードしにいくとかできるのではと目論みました。ただ、そのためにはpodspecファイルをなんとかしてpodコマンドから読んでもらわないといけません。独自のリポジトリを用意する方法もあるようですが、それはさすがに面倒だったので、ローカルで単体のpodspecファイルを読ま

元記事を表示

【Swift】CombineDataSourcesを使ってみた

# はじめに
UIKitもCombineで書きたいなと思って調べていたら、CombineCocoaやCombineDataSourcesなどを見つけました。
今回はCombineDataSourcesの基本的な使い方を紹介できたらと思います。

# データ
GitHubのリポジトリ検索APIを使用します。
Modelは全て一緒なのでここに書いておきます。
“`swift: SearchRepositories
import Foundation

// MARK: – SearchRepositories
struct SearchRepositories: Codable, Hashable {
var items: [Item]

enum CodingKeys: String, CodingKey {
case items
}
}

// MARK: – Item
struct Item: Codable, Hashable {
let name: String
let owner: Owner
let htmlU

元記事を表示

UITabbarControllerのWebViewを先読み(プリロード)して、表示速度を高速化する。

UITabbarControllerにWKWebViewを配置した場合、タブが切り替わってからロードが走りWebViewが表示されるのでロード待ちの時間が発生し、ページが表示されるまにで時間がかかってしまう。

これを改善するために裏側でロードを走らせてロード待ちの時間を短縮し、ページの表示速度を上げることが出来ましたのでご紹介します。

# ■ポイント
1. initでwebViewを読み込んでおく。
XibでViewを用意しておく。(あとでwebviewを追加する用)
2. initの段階ではWebviewの制約は仮で設定しておく。
3. viewDidLoadで用意していたXibのViewにWebViewを追加して、正しい制約をかける。

## 1. initでWebViewを読み込んでおく。
viewDidLoadでページをロードをしているからロード時間が発生していた。
└ initの段階でページのロードを走らせたい。

+ initでwebViewを使いたいのでwebViewだけはXibで作らない。
(理由:Xibで作ったViewは、viewDidLoadから使える

元記事を表示

OTHERカテゴリの最新記事