- 1. [iOS] [社内勉強会資料] ディープリンクについて
- 2. ショートカットアプリでYahoo!路線情報の事故遅延情報を取得する
- 3. TCAのチュートリアルのTodoをモジュール化してみた
- 4. MacでReact Native環境構築
- 5. 【Swift】ISO8601形式についてまとめた
- 6. iOSエンジニアがAndroidに転身して1ヶ月目の感想
- 7. 【SwiftUI】MVVM構造でログイン機能を実装してみた
- 8. 【Swift】URLにパラメータを付与する
- 9. SwiftUIでChatGPTのような会話アプリをサクッと試す
- 10. 【Flutter】 Stored properties cannot be marked potentially unavailable with ‘@available’の解決法
- 11. Xcode14.3にアプデするとKingfisherでコンパイルエラーが発生する不具合の対処法
- 12. TCAについて自分なりに調べてみた
- 13. StackViewに入れたButtonの幅を調整する方法
- 14. Mintを使ったSwiftLintの導入方法について
- 15. アプリ開発未経験から初めてのiOSアプリ公開まで
- 16. [TCA] ViewStateを使用する場合に@BindingStateを使う方法
- 17. 【Flutter】Flutter開発アプリでZendeskのチャットボット画面を表示してみた
- 18. アセットバリデーションに失敗しました
- 19. 【SwiftUI】MutationObserverを使用してWKWebViewの要素をブロックする
- 20. プロジェクトにMVPアーキテクチャを採用して1年。導入背景と変遷を振り返る。
[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/insta
【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 Foundationlet 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 Foundationlet 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.aError (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
【SwiftUI】MutationObserverを使用してWKWebViewの要素をブロックする
# はじめに
[Chrome拡張を作成した](https://qiita.com/SNQ-2001/items/94b86df3aea7e9d854c7)際にJavaScriptのMutationObserverというものを知りました。WKWebViewでも動いたので方法を記録しておきます。
「HTMLを監視して変化があったら処理を実行できる」という機能だと認識しています。
普段、ほとんどiOSしかやってないので全く知りませんでした。WebViewは以下のコードを使用します。
https://qiita.com/SNQ-2001/items/d86685481b4697e81e38
# サンプルアプリ
「Googleでログイン」と「Appleのアカウントでログイン」を非表示にします。
|||
|-|-|
|![simulator_screenshot_B379A600-6655-4A73-827F-8F108E7C6E5B.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1745371/6a
プロジェクトにMVPアーキテクチャを採用して1年。導入背景と変遷を振り返る。
# はじめに
所属する会社のプロジェクトにMVPを導入して、1年とちょっとが経ちました。なぜMVPを導入したのか?導入してみて、解決できた問題はなにか?次の課題はなにか?といったことを振り返っておこうと思います。そもそもMVPってどんなアーキテクチャなの?と言う方は以前にこのような記事も書いているのでぜひ読んでいただけたら嬉しいです。
https://qiita.com/Ri__/items/4ccd2dab642b2959aaf8
https://qiita.com/Ri__/items/e542bb88a7cd4243215a
# この記事でわかること
– 新規プロジェクトになぜMVPを採用しようと思ったのか
– MVPを採用して見えてきた課題
※既存のアーキテクチャをMVPに置き換える方法は分かりません# MVPを採用した背景
## 当時の課題
MVP採用以前はMVCアーキテクチャを採用していました。
MVCを採用していたので例に漏れず、とてもFatなViewController状態になっており、処理の流れが追いづらい状態になっていました。ボタンを押したら、M