- 1. Swift(iOS)でお絵描きViewを追加する
- 2. 【Swift】コードのみでTableViewを実装する
- 3. Codableを簡単にアウトプットする
- 4. 【Flutter】AndroidでiOS風の画面遷移とスワイプによるバックを実現する
- 5. 【Expo】ImagePickerで画像を複数枚選択する方法
- 6. Lottie-iOS 4.0.0以降でアニメーションがうまく表示されない時の対処法
- 7. 10 duplicate symbols for architecture arm64
- 8. 【Xcode】シュミレーターの位置情報を変更する
- 9. On Demand Resourceをテストする
- 10. Swift Date関連の備忘録
- 11. iPad Airであそぶ 〜Flowを使ったら速くなるか?〜
- 12. SwiftUIを使ってアイコンを爆速で作成する
- 13. 【なぜ】ipaファイルのサイズがビルドする度に毎回違う
- 14. 【Swift】インポート範囲を制限
- 15. SwiftUI FetchRequestでGroup byはできない
- 16. 【SwiftUI】CoreDataを使う
- 17. 【iOS】エミュレーターにキーボードを表示する方法
- 18. Firebase App DistributionでFlutterで作成中のiOSのアプリをインストールした時のメモ
- 19. 【Swift】許諾ダイアログの言語について(備忘録)
- 20. 【SwiftUI】macOSでウインドウサイズを固定する
Swift(iOS)でお絵描きViewを追加する
# ユーザーに指で描画してもらいたい
![Feb-04-2023 07-29-38.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/235259/3bce0994-373c-de56-41e2-f54e0e8b9b26.gif)
iPhoneをタッチして絵を描いてもらいたい場合、どのようにお絵描きできるViewを追加すればいいのでしょうか?# ライブラリを追加すればOK
https://github.com/Asana/Drawsana
お絵描きライブラリはいろいろありますが、今回はこれで。
### インストール
Swift Package Manager、Carthage、ファイルのドラッグ&ドロップ、の方法がありますが、僕のお気に入りはSwift Package Managerです。### 使う
### とりあえず描く
“`swift
import UIKit
import Drawsanalet drawsanaView = DrawsanaView()
let penTo
【Swift】コードのみでTableViewを実装する
# はじめに
苦手意識のあるUIKitを克服しよう企画!
これからUIKitの記事も投稿します!
今回はコードのみで最小実装のTableViewを作成してみたいと思います。https://qiita.com/SNQ-2001/items/d680d8bb4a73106bdefb
https://qiita.com/SNQ-2001/items/f010a0317734ec99bbdc
まずStoryboardを消します。
これは以前書いたので飛ばします。# 完成サンプル
![simulator_screenshot_D6F38B34-27C3-4D07-BA91-A4B6BDD9DB55.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1745371/96425d99-ce65-7f3e-d8e8-392e175d401f.png)# 実装
“`swift
import UIKitclass ViewController: UIViewController {
let av
Codableを簡単にアウトプットする
## はじめに
CodableとはEncode・Decodeの両方を兼ね備えたプロトコルである。
JsonEncoderクラスとJsonDecoderクラスを利用してCodableに準拠した型からJSONへのエンコードとJSONからCodableに準拠した型へのデコードを行う。## 対象者
この記事は下記のような人を対象にしている。– プログラミング初学者
– Encode・Decodeについて知見がある## ソースコード
“`swift:Swift
//Codableに準拠した型
struct SomeStruct: Codable {
let value: Int
}let someStruct = SomeStruct(value: 1)
//Somestruct型をJSONバイト列にエンコード
let jsonEncoder = JSONEncoder()
let encodedJsonData = try! jsonEncoder.encode(someStruct)print(encodedJsonData) // 11 bytes >>>
【Flutter】AndroidでiOS風の画面遷移とスワイプによるバックを実現する
# はじめに
Flutterはクロスプラットフォームなフレームワークですが、Flutterでモバイルアプリを開発していて、Android・iOSという二つのOSで画面遷移時の処理を統一するのに少し工夫が必要だったため共有します。
本記事ではAndroidにおいてiOS風の画面がスライドするようなトランジションエフェクトと、スワイプによる画面バック処理の実装について紹介します。
Androidバックキー押下時に何か処理を実装していた場合、そのままではスワイプによる画面バック動作が無効になってしまうので、その解決を試みました。# 目標
AndroidでiOS風のトランジションと「スワイプで前の画面に戻る」動作を共通で実装させる。# 実装
実装の内容は大まかに以下となります。
1\. AndroidでiOS風の画面遷移をさせる
2\. バックキーに処理を設定する
3\. バックキー押下時の処理とスワイプによるバック動作を併存させる## 1\.AndroidでiOS風の画面遷移をさせる
Flutterのコードを読むと、以下のようにOSによって異なる画面遷
【Expo】ImagePickerで画像を複数枚選択する方法
# はじめに
個人開発中にImagePickerを「Expo ImagePicker 複数枚選択」とググっても「ImagePickerでは複数枚選択できない」とか「MediaLibraryでできる」という記事しかでてこないので記事を書くことにしました。記事の最後にExpoで個人開発したアプリを紹介しているのでもしよければダウンロードお願いいたします!!?
# 前提
* SDK45以上
* expo-image-pickerインストール済み# 結論
下記のようにするだけでした。
“`react
import * as ImagePicker from “expo-image-picker”;
~~
~~
const result = await ImagePicker.launchImageLibraryAsync({
mediaTypes: ImagePicker.MediaTypeOptions.Images,
allowsMultipleSelection: true, // これをtrueに設定する
quality: 1,
});
“`
これだけでした。
Lottie-iOS 4.0.0以降でアニメーションがうまく表示されない時の対処法
## この記事を書くきっかけ
先日、Lottieで3Dレイヤーを含むアニメーションファイルに対応したPRがマージされており、ちょうど3Dレイヤーを含むアニメーションを使用したいためアップデートを行いました。
アップデート後にアニメーションを確認してみると、一部のアニメーションで座標がずれたり、レイヤーの色が真っ黒になってしまうなどの問題がありLottieのissueや検証などを含め解決法を模索しました。https://github.com/airbnb/lottie-ios/pull/1930
## Lottie-iOS 4.0.0の主な変更内容
– Lottie 3.4.0 から対応されているCore Animationがデフォルトで有効になる
– RenderingEngineOptionのデフォルト値が`.automatic`になる
– DecodingStrategy.dictionaryBasedがデフォルトで有効になる
– AppleのフレームワークとのコンフリクトがあるためAnimationViewなどがRenameされている
– BackgroundBehavior
10 duplicate symbols for architecture arm64
Google-Mobile-Ads-SDKのエラー
podfileを開いて
‘Google-Mobile-Ads-SDK’, ‘9.14’を’Google-Mobile-Ads-SDK’, ‘9.12’に変更して、pod installすれば治る。
【Xcode】シュミレーターの位置情報を変更する
# はじめに
シュミレーターの位置情報をいじれるらしいのでやってみた。位置情報を表示するまではここをコピーします。
https://qiita.com/chi_soft_dev/items/045ec9d91917dc3a7226
# やりかた
① 「Features」を選択します
② 「Location」を選択します
③ 「Custom Location…」を選択します![スクリーンショット 2023-02-01 21.58.42.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1745371/1fd6c9b5-0af4-7f47-a7bf-a2f5a5a77a57.png)
④ 座標を入力します
⑤ 「OK」を選択します
![スクリーンショット 2023-02-01 21.55.25.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1745371/1bbf81f6-9749-6a4b-126d-a507
On Demand Resourceをテストする
# On Demand Resourceをテストする
* ライブラリーをODRでダウンロードして使えるかをテスト
## 設定方法
* XcodeのProject SettingのBuild Settingsに移動し、Enable On Demand Resourcesを Yesにする。
* XcodeのProject SettingのResource Tagsタブに移動しタグを追加する。そのタグにODRにしたいAssetを追加する。## 実装方法
“`Swift
Task {
// NSBundleResourceRequestインスタスを先作成したタグ名で生成する
let request = NSBundleResourceRequest(tags: Set([“Tag”]))
// ODRがすでにダウンロードされたかを確認する
let accessible = await request.conditionallyBeginAccessingResources()
// ダウンロードされなかった場合、App Storeからダウン
Swift Date関連の備忘録
# **Swiftで曜日を表示する**
**yyyy/MM/dd(EEE)**
DateFormatterから曜日のフォーマットを指定して表示することができるようにする。
[Apple DateFormatter](https://developer.apple.com/documentation/foundation/dateformatter)“`swift
let dateFormatter = DateFormatter()
dateFormatter.dateFormat = “yyyy/MM/dd(EEE)”
let date = dateFormatter.string(from: Date())
“`冗長だけど、、、
DateFormatterから曜日を取得できることを知る前は、以下のように取得していた。
[Apple CalendarComponet](https://developer.apple.com/documentation/foundation/calendar/component)
“`swift
let weekDay = Calend
iPad Airであそぶ 〜Flowを使ったら速くなるか?〜
やってみたこと
iPad M1はマルチコアなので、Flow使えば速度あがるのでは?という思いつきから
ElixirDesktopを使えばElixirのライブラリFLowが動けば希望が見えるかも
このコラムではmacでiosアプリのビルド方法等には触れない
実験がメインであるベース↓
https://github.com/elixir-desktop/ios-example-app
こちらに付属するElixirDesktopのTODOアプリを改造してなんちゃってiexを作る
https://github.com/elixir-desktop/desktop-example-app
# ソースを改造する
“`diff_elixir:elixir-app/mix.exs
defmodule Todo.MixProject do
use Mix.Project@version “1.0.0”
def project do
[
app: :todo_app,
version: @version,
elixir: “~> 1
SwiftUIを使ってアイコンを爆速で作成する
## この記事の狙い
デザインツールを使わないでSwiftUIのみでアイコン(ボタン)を作成する試みです。[^1]
以下のような未来の職場風景を想像しています。| 今まで | これから |
|:—-:|:———-:|
| | |# ipaファイルのサイズがビルドする度に毎回違う
理由を知っている人がいればぜひ教えて頂きたいです。
また、自分だけの現象なのかというのも知りたいので皆さんの環境ではどうなのかも教えていただけると嬉しいです。iOSアプリ(ipaファイル)をXcodeでビルドしたとき、毎回ファイルサイズが数十バイト程度違っています。
以下は全く同じ手順で3回ビルドをしてみたときのファイルサイズを比較したものです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/574728/f9d02dbd-431b-d01e-5358-e488f8db32ad.png)同じアプリの内容であれば出来上がるファイルサイズも同じになるはずだと思っていますが、なぜiサイズが異なっているのでしょうか、、、?(実際、Androidアプリ(apkファイル)は何度ビルドしても同じファイルサイズでした。)
(2年ほどiOS/Androidアプリの保守を担当していましたが、今回初めて気づきました。。。)
【Swift】インポート範囲を制限
# はじめに
https://github.com/wmorgue/OnflowStatusこのリポジトリのコードを見ていたら以下のようなコードを見つけました。
“`swift
import struct SwiftUI.AppStrage
“`気になったので記録しておきます。
# やりかた
“`swift
import struct SwiftUI.Color
import class UIKit.UIColor
“`Viewなどにエラーが出ていることから実際にインポート範囲が制限されていることがわかります。
# おわり
インポート範囲を制限すると平均ビルド時間が増えるそうです笑# 参考記事
https://qiita.com/uhoo
SwiftUI FetchRequestでGroup byはできない
# はじめに
– Xcode 14.2
紹介するサンプルでは以下のModelを使用しています。
![スクリーンショット 2023-01-31 17.12.07.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/687960/c2b2265f-80c8-af88-90c3-dc7b1abbb5d4.png)
# SwiftUIにおけるFetchRequest
SwiftUIでCore Dataの機能が使える`FetchedResults` があります。
これを使うことにより、Core Dataの変化を検知してSwiftUIのViewを更新することが可能になっています。“`swift
struct ContentView: View {
@Environment(\.managedObjectContext) private var viewContext@FetchRequest (sortDescriptors: [.init(keyPath: \Item.tim
【SwiftUI】CoreDataを使う
# はじめに
https://qiita.com/SNQ-2001/items/61cef2153aad5c4d542f以前、「コードのみでCoreDataを実装する」を書きました。
しかし、それ以来CoreDataを使ったことがありませんでした。
先日使うことがあったので使い方を記録しておきます。# サンプルアプリ
![Simulator Screen Recording – iPhone 14 Pro – 2023-01-29 at 19 14 48](https://user-images.githubusercontent.com/84154073/215320876-026a8dd5-70ff-4bd6-be5d-5394bf5c7650.gif)# 実装
### xcdatamodeldを作成
① メインターゲットフォルダを右クリックします
② 「New File…」を選択します
【iOS】エミュレーターにキーボードを表示する方法最近iOSの開発を勉強中で、自分は良くエミュレーターで確認することが多いのですが、iOSのエミュレーターでキーボードが表示されなかったので、残しておこうと思いました。
# キーボード表示方法
I/O -> keyboard -> Toggle Software Keyboardをクリックします。
これで表示されました。![スクリーンショット 2023-01-29 14.35.01.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/274615/2e03248f-8bc9-ebb0-ad84-623c2430323a.png)
Firebase App DistributionでFlutterで作成中のiOSのアプリをインストールした時のメモ
開発中のアプリを海外にいる人にインストールしてもらう必要があったのでメモ
ちょっとまだ、不明確な部分もある。# 必要な作業
– ExportOptions.plist の作成
– 作成場所は [プロジェクトディレクトリ]/build/ios
– 以下のような感じでOK
– 多分、他にも作る方法はあると思うが、調査不足
– 手動で作らないほうがいいのかもしれない?“`xml
compileBitcode
destination
export
method
【Swift】許諾ダイアログの言語について(備忘録)
・許諾ダイアログの言語についてほぼ自分用に備忘録を。
## 今回書いたきっかけ
一部の許諾ダイアログで「シミュレータ」と「実機」での相違に気がついた。## 通知許可ダイアログで調査
### 1. シミュレータ
言語を「日本語」にしても、表示される言語は「英語」だった。### 2. 実機
言語を「日本語」にしたら、表示される言語は「日本語」だった。## 結論
まともに開発したいならやっぱり実機だろ~~~~~## 最後に
iOSアプリ開発をしています。
主にSwiftですが、最近は熱が入ってきてFlutterも?
色々やってます。もし良かったら見てってください。https://sogablog.net/
【SwiftUI】macOSでウインドウサイズを固定する
# はじめに
[`frame(minWidth:idealWidth:maxWidth:minHeight:idealHeight:maxHeight:alignment:)`](https://developer.apple.com/documentation/swiftui/view/frame(minwidth:idealwidth:maxwidth:minheight:idealheight:maxheight:alignment:))を設定することでウインドウサイズを固定できると思っていたらできなくてつまづいたので記録しておきます。私の認識では以下のようにすれば1番大きい時で110、1番小さい時で100になると思ってました。
“`swift
import SwiftUIstruct ContentView: View {
var body: some View {
VStack {
Image(systemName: “globe”)
.imageScale(.large)