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

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

【Swift】UIKitでPreviewを使いながら開発をする

# はじめに
Xcode11で導入されたXcode Previewはいままで表示速度や意味不明なエラーで使い物になりませんでしたが、Xcode14で割と快適に使えるようになりました。
UIKitで使用してみたのでやり方と感想を書きます。

# 表示するView
今回はViewControllerが表示された事がわかれば良いので背景色を赤にしてるだけです。
“`swift
import UIKit

class ViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
view.backgroundColor = .red
}
}
“`

# 実装
“`diff_swift
import UIKit
import SwiftUI

class ViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLo

元記事を表示

Unityで作成したiOSアプリの更新手順

unityで作成したiOS用アプリの更新につき手順を記します。
定期的に更新しなければいけないのに、都度忘れてしまっているので記事にしました。
足りないところ適宜更新しますが、間違っているところあったらご指摘くださいね。

# 環境
・Mac(私はMacBook Proを使用してます)
・Unity 2021.3.5f1(LTS)
・xcode

#Unity
FileからBuild Settings…を選択
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2436967/ace41305-350a-b10a-c365-185075635f5d.png)

PlatformにてiOSを選択
Player Settings…よりPlayerの
Company Name
Project Name
Version
を設定して閉じる

Build SettingsウィンドウにてBuildを押下
![image.png](https://qiita-image-store.s3.ap-nor

元記事を表示

【Swift】TwitterAPIのエラー構造体を作った

# はじめに
TwitterAPIを使ったアプリを作った時にエラー構造体を作ったので共有します。
返ってくる可能性のあるエラーは全て記載してあると思います。

# 実装
“`swift
// MARK: – TwitterError
struct TwitterError: Decodable {
let errors: [Errors]
}

// MARK: – Error
struct Errors: Decodable {
let message: String
let code: ErrorCode
}

// MARK: – ErrorCode
enum ErrorCode: Int, Error, LocalizedError, Decodable {
case code3 = 3
case code13 = 13
case code17 = 17
case code32 = 32
case code34 = 34
case code36 = 36
case code38 = 38

元記事を表示

【SwiftUI】URLスキームを受け取る

# はじめに
TwitterのURLスキームはURLスキームの種類によって起動する画面が振り分けられます。
今回はその挙動をSwiftUIで再現してみます。

# TwitterのURLスキーム
**タイムラインタブ**
twitter://timeline

**検索タブ**
twitter://search

**メンションタブ**
twitter://mentions

**DMタブ**
twitter://messages

# URLスキームの設定
① プロジェクトを選択します
② メインターゲットを選択します
③ 「Info」を選択します
④ 「URL Type」を開きます
⑤ 「+」を押します
![スクリーンショット 2022-09-22 18.42.57.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1745371/d13f68e5-95fa-f91d-304e-c84357d3471d.png)

⑥ 「Identifier」を設定する
⑦ 「URL Schemes」を設定する
![ス

元記事を表示

Xcode14.0でiOS15.7がインストールされた端末の実機デバッグができない!

`/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/DeviceSupport/` にiOS15.7に対応するサポートファイルがあれば動くのですが、今のところ(2022-09-22現在)そんなものは存在しないようです。

https://stackoverflow.com/questions/73721778/looking-for-ios-15-7-support-files-for-xcode14

XCode14の[リリースノート](https://developer.apple.com/documentation/xcode-release-notes/xcode-14-release-notes)を読んでみると、Known Issues欄の最後にこのような記述が。

> ・Xcode 14 cannot be used with iOS 15.7 for development. (99847608)
>  Workaround: Use Xcode 13.4.1 with iOS 1

元記事を表示

[TCA] enum State をstruct Stateに持たせる場合のpullback方法

# 問題
`The Composable Architecture`の`SwitchStore`での画面出し分けをする際、enumにStateを持たせる場合、以下のようにpullbackします。

“`swift:AppCore.swift
enum AppState {
case firstScreen(FirstScreenState)
case secondScreen(SecondScreenState)
}

enum AppAction {
case firstScreenAction(FirstScreenAction)
case secondScreenAction(SecondScreenAction)
}

struct AppEnvironment { }

let appReducer = Reducer.combine(
firstScreenReducer
.pullback(
state: /AppSt

元記事を表示

ElixirDesktop iOS でカメラ撮影

## はじめに

ElixirDesktop を iOS で動かそうと色々検証中

https://qiita.com/RyoWakabayashi/items/f5d97a7e857983eac7a4

今回はカメラを起動して写真を撮影し、 Elixir 側で画像処理してみました

## 実行環境

– 開発環境・デスクトップ版実行環境

– macOS Monterey 12.5.1

– モバイル版実行環境

– iPhone SE 第2世代
– iOS 15.6.1

## 実装コード

デスクトップ用

https://github.com/RyoWakabayashi/elixir-desktop-camera

iOS用

https://github.com/RyoWakabayashi/elixir-desktop-camera-ios

## 参考記事

画像データの連携と画像処理部分を参考にしました

https://qiita.com/the_haigo/items/236e0e3c6cfbbd12799a

カメラ起動について参考にしました

ht

元記事を表示

SwiftUI ⌘+クリックで出るメニューでViewを分割したりする

# 環境
Xcode Version 14.0 (14A309)
SwiftUI Tutorialの[Building Lists and Navigation](https://developer.apple.com/tutorials/swiftui/building-lists-and-navigation)を元にしています

# 概要
SwiftUIでコードを扱っているとき、Viewのコードを⌘キー+クリックすることでSwiftUIに対し色々便利なことができるメニューが表示されます。

![スクリーンショット 2022-09-20 13.52.20.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/687960/aaa2ea7f-639c-34ce-5dbb-b44305601b2c.png)

主にSwiftUIでのみ出るメニューについて説明します。
以下のSwiftUIを操作します。

“`swift
struct LandmarkDetail: View {
var landmark

元記事を表示

External Link Account API の実装方法

# External Link Account API
[ExternalLinkAccount](https://developer.apple.com/documentation/storekit/externallinkaccount)

:::note warn
2022年10月12日までにExternal Link Account APIを採用し、App Storeにアプリのアップデートを提出する必要があります
:::

# ソースコード
“`swift
/// External Link Account
if #available(iOS 16.0, *) {
Task {
if await ExternalLinkAccount.canOpen {
do {
try await ExternalLinkAccount.open()
} catch {

元記事を表示

ゆめみのインターンシップに参加した話

# 自己紹介
Swift歴1年ちょっとの文系大学生です。
普段はSwiftUIで個人開発をしていて、UIKitは全くの初心者です。
インターンシップに参加することに勇気が出ないよって方にインターンシップの雰囲気を伝えれたなと思います。

# [インターン詳細](https://hrmos.co/pages/yumemi/jobs/0000502)
最前線で活躍するエンジニアと共に、開発を体験!

– Pull-Requestベースの実践的な開発
– 先輩エンジニアとペアプロ
– テスタブルな設計とリファクタリング
– iOSアプリ開発あるある 不具合発生パターンを学習
– UIKitの鬼門 UITableView強化トレーニング
– 成果発表LT会

期間: 9月1日〜9月14日
場所: オンライン(家)
内容: https://github.com/yumemi-inc/ios-training

[こちら](https://github.com/yumemi-inc/ios-training)のリポジトリのREADMEに記載されているSessionをレビューを頂きながら進めていくと

元記事を表示

サイバーエージェントのインターンシップに参加した話

# 自己紹介
Swift歴1年ちょっとの文系大学生です。
普段はSwiftUIで個人開発をしていて、UIKitは全くの初心者です。
インターンシップに参加することに勇気が出ないよって方にインターンシップの雰囲気を伝えれたなと思います。

# [インターン詳細](https://www.cyberagent.co.jp/careers/students/event/detail/id=27497)
![27497_ext_03_0.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1745371/44aba2c8-ec14-47f7-6262-55e0a96ea498.png)
期間: 9月16日〜9月18日
場所: Abema Towers
内容: 「無視できない!設計が学べるiOSハンズオン」

オフラインでの開催でした。

![IMG_1356.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1745371/a143a35

元記事を表示

【Flutter / RESTAPI】簡単なAPIをFlutterで呼び出してみた!

## 初めに
iOSやAndroidの開発を今までやってきましたが、
ここ最近はFlutterを使用して開発をしている企業も
多いのではないかと感じます。

フリーランスの案件にもちらほら見かけるので、
今更かもですが勉強しなくては。。

Dartは簡単に触ったので、お馴染みのAPI操作を
やってみました!

## 使用するAPI
郵便番号をパラメータとして使うことで、
住所の情報がJson形式で返却されるAPIを使用します。

参考:郵便番号データ配信サービス

http://zipcloud.ibsnet.co.jp/

## 環境
・Android Studio
・url_launcher: 6.1.2
・flutter_html: 2.2.1
・http: 0.13.3

## 実装
全体のソースというよりは、テンプレート見たいな感じで
順に説明します。
### 0. 事前準備
“`
// ①pubspec.yamlで使用するパッケージを入力
# The following adds the Cupertino Icons font to your application.

元記事を表示

FlutterのiOSデバッグ起動時に Null check operator used on a null value

`Flutter`のデバッグ作業中、アプリ起動時に`FirebaseAuth.instance.currentUser`の部分で`Null check operator used on a null value`のエラーが出てどうにもいかなかった時の対処法です。`flutterfire_cli`で`flutterfire configure`を試したり、`XCode`のキャッシュを削除したりする前に、

– `firebase login`で確認しても`user`の確認が取れている。
– デバッグのシュミレータでなく実機での検証は成功する。
– 周りでは動いていてコードには問題がなく、アプリケーション内部のクラッシュと判断できる。

上記に該当するのであればまず、試して頂きたいのが。![スクリーンショット 2022-09-19 16.23.51.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1134006/4753a43e-3cf1-91de-926a-6583dd7daaca.png)
`Simula

元記事を表示

UICollectionViewDiffableDataSourceの挙動を理解する

## 概要

Appleはここ2,3年、UITableViewからUICollectionViewへの置き換えを進めていて、自分も今までだったらUITableViewを使うような画面も最近はUICollectionViewでリスト表示を実装するようにしています。
iPhoneならリスト表示、iPadならグリッド表示みたいな画面を構成する場合もよくあると思うので、UICollectionViewで作っておく方が何かとスケールしやすいので、そのうちUITableViewはUICollectionViewに完全置換されると思っています。
それに合わせるように出てきた`UICollectionViewDiffableDataSource`を使って実装しているのですが差分更新の挙動をしっかり理解する為に色々試してみました。
(UITableViewDiffableDataSourceもありますが、ほぼ同じです)

#### 開発環境
– Xcode 14.0
– iOS16.0

## サンプルコード

モックデータでToDo一覧を表示し、タップすると完了状態がトグルするアプリ
挙動を確認する

元記事を表示

iOSエンジニアを目指す26歳男

swiftを学び初めて10日が経過した。独学で学習を進めていたが、iOSアカデミアに入校することにした。現在、動画教材とアプリ制作のチャプターを学んでいるが、難しい。。これまでの数学や国語などの学習とは全く異種な学習だ。でもだから面白い。自分の知らない領域の知識を得られている。あとは自分次第。学習時間の確保と継続。今はこのふたつを徹底しながら、自分を高めていきたい?✨

元記事を表示

【Swift】Date型をデコード

# はじめに
いままでCodableでデコードする時にデータがあるとデコードに失敗してたのでStringでデコードしてました。

Dateでデコードする方法を学んだので記録しておきます。

# 方法
“`swift
let decoder = JSONDecoder()
decoder.dateDecodingStrategy = .iso8601
let weatherModel = try decoder.decode(WeatherModel.self, from: weatherData)
“`

# おわり
勉強になりました

元記事を表示

【Swift】初心者による優しいデリゲート

# はじめに
:::note warn
間違いがあるかもしれないです。
間違っていたらコメントください
:::

delegateを使ってViewに通知する方法を学んだので記録しておきます。

# 実装
“`swift:ViewController
import UIKit

class ViewController: UIViewController, SampleModelDelegate {

private let sampleModel = SampleModel()

override func viewDidLoad() {
super.viewDidLoad()

sampleModel.delegate = self

// ここでリクエスト
sampleModel.fetchAPI()
}

func sampleModel(_ sampleModel: SampleModel) {
print(“レスポンスが返ってきました”)

元記事を表示

pkgConfig を書いて NDI SDK(fat static library) をパッケージとしてアプリに組み込む

> Network Device Interface (NDI) is a high performance standard that allows anyone to use real time, ultra low latency video on existing IP video networks.

[NDI](https://ndi.tv/about-ndi/) は IP ネットワーク上でビデオやオーディオを効率よく伝達する方式のひとつです。

iOS 向けの [SDK](https://ndi.tv/sdk/#download) も公開されていてダウンロードすることができます。ライブラリはパス `/Library/NDI SDK for Apple/lib/` にプラットフォームごとにインストールされますが、実体は fat な static library です。

“`
$ file /Library/NDI\ SDK\ for\ Apple/lib/iOS/libndi_ios.a
/Library/NDI SDK for Apple/lib/iOS/libnd

元記事を表示

SwiftUI のツールバーの外観を UIBarAppearance で指定する方法に toolbarBackground で別れを告げる

## SwiftUI と `UIBarAppearance`

iOS 15 まで、SwiftUI では NavigationBar / TabBar / ToolBar などのツールバーの背景色を設定する手段がありませんでした。そのため、例えば以下のように `UIBarAppearance` を指定する方法がとられていたと思います。

“`swift
let appearance = UITabBarAppearance()
appearance.backgroundColor = .systemBackground
UITabBar.appearance().standardAppearance = appearance
UITabBar.appearance().scrollEdgeAppearance = appearance
“`

しかし、この方法はグローバルな設定を書き換えてしまうので以下の記事で書かれているような問題を引き起こすことがあります。

https://qiita.com/noppefoxwolf/items/5ba81e93bef8b91f1484

元記事を表示

画面の一部でUIHostingControllerを使っているとNavigationBarを隠したいのに隠れない問題の対応方法

下記のコードのようにナビゲーションバーを隠すためsetNavigationBarHiddenを記述しているがUIHostingControllerを使用しているとナビゲーションバーが隠れない。

“`swift
class ThirdViewController: UIViewController {

override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(animated)
self.navigationController?.setNavigationBarHidden(true, animated: false)
}

override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view.

let hc = UIHostingContro

元記事を表示

OTHERカテゴリの最新記事