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

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

Xcode 14.3 をインストールした環境で、Xcode 14.1 で Rosetta を有効にしてビルドする

Xcode 14.3 から Rosetta のサポートはなくなりました。

> Xcode isn’t supported under Rosetta. See Developer Technote “Resolving architecture build errors on Apple silicon“ for more information. (92772361)

https://developer.apple.com/documentation/xcode-release-notes/xcode-14_3-release-notes#Deprecations

これは Xcode 自体が Rosetta をサポートしないだけで、手順は異なりますが、これまで通りに Rosetta を利用したビルドは有効です。メニュー Product から Destination → Destination Architectures → Show both を選ぶと、Rosetta なシミュレーターが追加されます。それを選択してビルドします。リリースノートが言葉足らずのように感じます。

元記事を表示

【SwiftUI】TCAでアラートを実装する

# はじめに
最近、個人開発アプリをTCAにリアーキテクチャしています。
これから学習も兼ねて、基本的な形を記事にしていこうと思います。

# 実装
“`swift:ContentView
import SwiftUI
import ComposableArchitecture

struct ContentView: View {
let store: StoreOf

var body: some View {
WithViewStore(store) { viewStore in
Button {
viewStore.send(.alertPresented)
} label: {
Text(“アラート”)
}
.alert(store.scope(state: \.alert), dismiss: .alertDismissed)
}
}
}
`

元記事を表示

[iOS] [社内勉強会資料] ディープリンクについて

# 「ディープリンク」とは

ディープリンクとは、Webページやスマートフォンアプリからアプリの特定コンテンツへ移動するリンクのことです。

ディープリンクは元々、あるWebサイトのページから他のWebサイトのページやコンテンツに直接リンクすることを指して使われている言葉でしたが、近年になってスマートフォンやアプリの利用が増加したことに伴い、現在利用されているような意味へと再定義されました。

(引用:[AIアナリストBLOG](https://wacul-ai.com/blog/site-improvement/method/deeplink/))

iOSにおける実現方法は以下です。

– カスタムURLスキーム
– Universal Links
– Firebase Dynamic Links

# カスタムURLスキーム

– URLスキームとは、URLの“://”より前の部分で、リソースにアクセスするための手段を示します。
– http/https, ftp, mailto などなどが既定のURLスキームです。
– アプリ独自で決めたURLスキームをカスタムURLスキームと

元記事を表示

ショートカットアプリでYahoo!路線情報の事故遅延情報を取得する

# 要約
通勤で利用している全路線の運行状況を朝一番お手軽に確認したい。しかし、既存のアプリやそのウィジェットによる確認は少々手間である。そこで、事故や遅延が発生している路線の情報のみを起床と同時に読み上げられるよう、ショートカットアプリのアクションを作成した。

# イントロ
2023年4月、筆者は晴れて新社会人となった。
これまでキャンパス付近に家を借りていたため徒歩のみでの通学をしていた。
しかし、入社後は指定の社宅に入居し通勤しなければいけなくなった。
社宅は会社の近くにあるわけではなく、約30分ほど電車に乗らなければいけない。

# 路線の運行情報の確認
通勤が鉄道に依存する以上、毎朝確認しなければいけないことが使用する路線の運行情報である。
路線に事故や遅延が発生した場合、路線を変更したり上司からの対応を仰いだりする必要がある。
~~そこまでして通勤しなければいけないのかは置いといて(研修後で社畜精神を塗り込まれたわけではないと断ってはおく)。~~

# 王道ツール
路線情報として有名なのは **Yahoo!路線情報の”運行情報”** である。

https://tra

元記事を表示

TCAのチュートリアルのTodoをモジュール化してみた

# 環境
– Xcode
– 14.2
– Swift
– 5.7.2
– The Composable Architecture
– 0.52.0
– mac OS
– 13.1

# はじめに
フォルダ構成はisowordsを参考にしています。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/179037/2a908934-b07b-ba70-caee-520b00dff1ec.png)

# 手順
1. ライブラリーの作成
1. File>New>Project>Swift Packageでライブラリーの作成(TodoFeature)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/179037/7fa988de-9961-c494-075d-d69ba29c8b75.png)
1. Package.swiftを編集する

元記事を表示

MacでReact Native環境構築

どうもこんにちはたくびー(@takubii)です。

今回はReact nativeの環境構築について紹介したいと思います。
なお、Expoは使わずReact native CLIで構築を行いました。

この記事は2023年3月に書いています。今後のバージョンアップなどで同様の手順では構築できない可能性がありますので、注意してください。

参考
https://reactnative.dev/docs/environment-setup?platform=ios

条件は以下となっております。
– M1 Mac
– IOS、Androidそれぞれエミュレーターで動かす
– React native CLI

### IOS、Android環境共通
“`terminal
$ brew install watchman
“`
node.jsに関してはバージョン管理できるnvm経由でLTSをインストールします。
“`terminal
$ curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.3/inst

元記事を表示

【Swift】ISO8601形式についてまとめた

# はじめに
最近はDateをISO8601形式に変換して使うことが多いです。
後から見返してわかるようにまとめてみました。

# DateからISO8601形式のStringに変換
“`swift
let date = Date()

let dateFormatter = ISO8601DateFormatter()
dateFormatter.string(from: date)
“`

# ISO8601形式のStringからDateに変換
“`swift
let dateString = “2023-04-05T22:32:10Z”

let dateFormatter = ISO8601DateFormatter()
dateFormatter.date(from: dateString)
“`

# ミリ秒を含んだISO8601形式
“`swift
import Foundation

let dateString = “2023-04-05T22:32:10.123Z”

let dateFormatter = ISO8601DateFormatter()
d

元記事を表示

iOSエンジニアがAndroidに転身して1ヶ月目の感想

##### 今回はiOSエンジニアがAndroidに転身して感じた障壁などを紹介していきます!

まず大きな違いとして挙げられるのが
– プログラミング言語
– 開発ツール

の2つです。

### 言語の違い
言語はiOSではobjective-Cと2014年からswift、AndroidではjavaとC++と2017年からkotlinが使用されています。
自分はswift⇨kotlin,javaへの移行だったのですが、今のところ文法的にはほぼ同じと感じていて移行はしやすいと思います。

### 開発ツールの違い

開発ツールはiOSではXcode、AndroidではAndroid Studioでの開発となります。
ここでの大きな違いはviewの扱いです。
iOS側でのxibファイルとAndroid側でのxmlファイルの扱いの違いを意識できるまではだいぶ開発に苦戦しました。
iOS側xibファイルではドラック&ドロップなどでviewに直接buttonやtextを置くことができ、頭の中にあるデザインをそのままviewに反映するのが非常に楽でした(というかそれが普通だと思っていました

元記事を表示

【SwiftUI】MVVM構造でログイン機能を実装してみた

自身の知識の整理と備忘録も兼ねて「**Swift UI × MVVMアーキテクチャ**」でログイン機能を実装する流れをまとめてみます。

間違っている点やこうした方が良くなるなどの意見がありましたらコメントくださると嬉しいです。完成したものはGitHubにて公開しています!

https://github.com/amefure/iOS-Login-function-following-MVVM-architecture

# 環境

+ Swift UI
+ Xcode
+ Firebase
+ Cocoa Pods
+ MVVMアーキテクチャ

ログイン機能を実装するにあたって全て自分で実装したわけではなくGoogleが提供しているクラウドサービスである**FirebaseのAuthentication**を利用していきます。

Authentication(以下Auth)を組み込むだけでユーザー情報の登録や操作、ログイン状態の管理、確認メールやリセットメールなどのメール送信機能を簡単に実装でき、かつ**無料の範囲でも1日3000人まで利用可能**になっています。

元記事を表示

【Swift】URLにパラメータを付与する

# はじめに
現在、ウィジェットを使用するアプリを作成しています。
URLSchemeにパラメータを付与して、ウィジェットからアプリにデータを渡すという仕組みにしました。
それに伴い、URLにパラメータを付与する実装を行なったので、記録しておきます。

# 実装
“`swift
import Foundation

let baseURL = URL(string: “https://sample.com/”)!

var components = URLComponents(url: baseURL, resolvingAgainstBaseURL: false)

components?.queryItems = [
URLQueryItem(name: “userName”, value: “SNQ-2001”),
URLQueryItem(name: “postCount”, value: “364”)
]

if let url = components?.url {
print(url)
}

// https://sample.com/?user

元記事を表示

SwiftUIでChatGPTのような会話アプリをサクッと試す

OpenAI の API(をラップしたライブラリ OpenAISwift )を利用して、SwiftUI で ChatGPT のような会話アプリをサクッと試す方法を紹介します。

# 完成イメージ

![20230404_182427.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1170961/61b9e8f8-61a7-cba4-8e5a-dec9f9208e1d.gif)

# 使うもの

– OpenAI の API key
– OpenAISwift
– OpenAI導入ライブラリ
– [adamrushy/OpenAISwift: This is a wrapper library around the ChatGPT and OpenAI HTTP API](https://github.com/adamrushy/OpenAISwift)

# 開発環境

– Xcode 14.2
– iOS 16.2
– OpenAISwift 1.2.0

# 手順

– はじめに O

元記事を表示

【Flutter】 Stored properties cannot be marked potentially unavailable with ‘@available’の解決法

# xcodeを14.3に上げるとiosビルドが失敗する。。。
最初はこんなエラーでビルドが失敗しました。

“`console
Error (Xcode): File not found: /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/arc/libarclite_iphonesimulator.a

Error (Xcode): Linker command failed with exit code 1 (use -v to see invocation)

Could not build the application for the simulator.
Error launching application on iPhone 14 Pro Max.
“`

どうやらこれはxcodeを14.3にアップしたからだそうです:frowning:

https://zenn.dev/ischca/articles/a00c3adf626ea0#自動で

元記事を表示

Xcode14.3にアプデするとKingfisherでコンパイルエラーが発生する不具合の対処法

# エラー内容
Xcode14.3にアプデしたところ`Kingfisher`で以下のようなエラーが発生し、アプリがビルドできなくなってしまった

“`
if let placeholder = context.placeholder, let view = placeholder(binder.progress)
^
error: initializer for conditional binding must have Optional type, not ‘AnyView’
“`

# 環境
Xcode:14.3
Kingfisher:7.2

# 参考記事
こちらの記事が解決に導いてくれそう

https://github.com/onevcat/Kingfisher/pull/2029

# 対処法(結論)
バージョンを**7.6.2**にすれば問題なく動作する模様。
私は以下のようにPodのバージョンを設定した。

“`.p

元記事を表示

TCAについて自分なりに調べてみた

## はじめに
今までSwiftUIを使用してアプリを作る際、アーキテクチャには、情報量なども多いことから「MVVM」を採用していました。
しかし、ふと「本当にMVVMが最適なんだろうか?」と思いネットで調べた結果、どうやら「The Composable Architecture(TCA)」というものがいいらしいという情報を見つけたので調べることにしました。
今回は、その調べたことを忘れないようにメモします。

## The Composable Architecture(TCA)とは
The Composable Architecture(TCA)とは、Apple製品プラットフォーム上でのアプリ開発におけるシステムアーキテクチャをフレームワークのかたちで提供してくれるフレームワークです。

### TCAが提供する機能
+ State Management
シンプルな値型を使ってアプリケーションの状態を管理し、多くの画面で状態を共有することで、ある画面での変異を別の画面ですぐに確認できるようにする方法。
+ Composition
大きな機能を小さな部品に分解して、それぞれ独立したモ

元記事を表示

StackViewに入れたButtonの幅を調整する方法

# 始めに
オートレイアウトそのまま使えば簡単にできますが、あとでレイアウト変更が楽なStackViewを使ってやってみたのでメモです。
他にも色々方法はあると思います。
# やりかた
こんな感じのレイアウトでボタンの横幅を変えたい
![スクリーンショット 2023-04-03 18.55.58.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2883687/920f1db5-fa9b-9ad5-7943-f2f9f1102e68.png)

## StackViewを追加
親のStackViewの中に子StackViewを追加してButtonを入れ子にします
![スクリーンショット 2023-04-03 22.00.03.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2883687/c1b3fa81-f190-9df2-c7af-a1776bdd5463.png)

## Buttonのwidthを設定
ボタンの横幅を

元記事を表示

Mintを使ったSwiftLintの導入方法について

## はじめに
個人開発をしていく中で、Mintを使ってSwiftLintを導入することがあったので、学習のアウトプットとして残していこうと思います!!
## Mintとは
今回のメインテーマではないので一言で簡単に説明すると、Swiftのコマンドラインツールを簡単に管理してくれるものです!

ex. Swiftのコマンドラインツール
– SwiftLint
– SwiftFormat
– SwiftGen
などなど…

上記の3つが、自分が学習したことがあるものなので、今回はSwiftLintに注目してアウトプットして行きたいと思います!
他の二つも後程挙げて行きたいと思います!

※Mintのセットアップは以下の記事を参考に学習させていただきました?
https://qiita.com/uhooi/items/6a41a623b13f6ef4ddf0
https://blog.mothule.com/ios/mint/ios-mint-basic-usage

## SwiftLintって何?

### 概要
コードの可読性や保守性、一貫性を高めるために、開発者があらかじめ

元記事を表示

アプリ開発未経験から初めてのiOSアプリ公開まで

## はじめに
今回、初めてApp storeにオリジナルアプリを公開することができました。
アプリ開発未経験からiOSアプリ公開までの振り返りを記事にしたいと思います。

## 背景
私は、現在ネットワーク運用監視の仕事をしています。ちょうど1年前に福祉職からIT業界に未経験で転職しました。
今の仕事でプログラミングに関わることは少ないですが、せっかくIT業界に入ったからには自分で形に残るものを作りたいと思い独学でプログラミングの学習を始めました。

## iOSアプリ開発までの経緯
### きっかけ
デザイナーをしている友人とプログラミング勉強してるなら何かアプリ作ろうよと言われたことが始まりです。ただ学習しているだけでは、なかなか成長が実感できなかったため、技術不足でもとにかく形にしてみようと思いアプリ開発を始めました。
### ブラウザベースのアプリを作る
2022年9月〜[Recursion](https://recursionist.io/)というプログラミング学習コンテンツの中級編まで行い、
初めはhtml/css/javascriptで簡単なブラウザベースのアプリケーシ

元記事を表示

[TCA] ViewStateを使用する場合に@BindingStateを使う方法

TCAでアプリを作る際、View特有の変換をしたい場合や不必要な再描画を防ぎパフォーマンスを上げる目的でViewStateの導入をするときがあると思います。
しかし、ViewStateを使う場合、@BindingStateを使用することは現状のTCAのAPIでは提供されていなく、
以下のような便利なAPIは使えないです。
“`Swift
viewStore.binding(\.$text)
viewStore.send(.set(\.$text, “”)
“`
今回はViewStateでもBindingStateの恩恵を受けられるようにコードを書いていきます。

## 方法1 ViewState用のPropertyWrapperを定義する方法
“`Swift
@propertyWrapper
public struct ViewStateBinding {
let keyPath: WritableKeyPath>
let bindingState: BindingState

元記事を表示

【Flutter】Flutter開発アプリでZendeskのチャットボット画面を表示してみた

## はじめに
私自身Zendeskについての知見等がなかったのですが
Flutterのアプリに対してZendeskのチャットボットが利用できるのか
調査する機会があり、試してみてAndroidの実装で少し詰まった点があったので残そうと思います!

## 開発環境
– MacOS: 12.4(Monterey)
– Androidstudio: 2021.2.1 patch1
– flutter: 3.7.6
– dart: 2.19.3

## Flutter用のパッケージがあるのかどうか
以下の公式Developerサイトを確認したのですが公式では
Android,iOSネイティブSDKの提供のみでFlutter用はなさそうでした。
https://developer.zendesk.com/documentation/zendesk-web-widget-sdks/sdks/android/getting_started/

これは自作するしかないかとも思ったのですが調べてみると既にパッケージで作成されているものが
ありましたのでこちらを調査。

### zendesk 2.0.

元記事を表示

アセットバリデーションに失敗しました

AppStoreConnectにアップデート申請しようとするとXcode14.2からエラー表示がでてアップデート申請ができなくなりました。

# エラー内容

**英文**
>Asset validation failed
Invalid Signature. A sealed resource is missing or invalid. The file at path “○○○○○○.app/○○○○○○” is not properly signed. Make sure you have signed your application with a distribution certificate, not an ad hoc certificate or a development certificate. Verify that the code signing settings in Xcode are correct at the target level (which override any values at the project level). Addi

元記事を表示

OTHERカテゴリの最新記事