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

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

[Swift5]”lottie-ios”を使ってアニメーションを実装する方法

## lottie-iosとは?
**Lottie(ロッティー)**は、Airbnbから登場したiOS、Android、React Native対応のアニメーションライブラリです。Adobe After Effectsで表示できるアニメーションをリアルタイムでレンダリングし、ネイティブアプリで静的なコンテンツを作るのと同じくらい簡単に面白い動きをするアニメーションを作成することができます。

▼詳しくはこちら
https://ferret-plus.com/6214

▼公式ページはこちら
https://airbnb.design/lottie/

## 実装環境
macOS Catalina 10.15.7
Xcode 12.1
Apple Swift version 5.3

今回は**TestApp**というプロジェクトで実装します。

## 導入の流れ
①CocoaPodsのインストールとインポート
②JSONファイルのダウンロード
③ダウンロードしたファイルを読み込んでコード記述

## ①CocoaPodsのインストールとインポート
必要とするPodsは`pod ‘lot

元記事を表示

Swift初学者が自動販売機ロジックを実装してみた!

#概要
現在、私はMENTAサービスを利用し、ヤマタクメンターにご指導いただいています。

ヤマタクメンターやサービスについて知りたい方はこちら!
(https://menta.work/plan/584)

その中で、今回は、「自動販売機ロジックの実装」の課題を行ったので、アウトプットしていきます。

なお、今回の課題はSwift初学者が作ったロジックであり、至らぬ点が多々あると思います。どうか、温かい目で見守っていただけると幸いです。

アドバイスはどしどし受け付けております。

※一部、サンプルコードも含まれており、今回は、リファタリングがメインです。その点もご理解ください。

***環境***

-Playground

# 要件

### サンプル実装の要件
・日本円を入力できる
・入力された日本円と飲み物の価格を比較し、前者が後者の値を上回っている且つ対象の飲み物の在庫がある場合に購入可能フラグを返す
・対象の飲み物は「コーヒー」「水」「モンスター」とする
・対象の飲み物の購入可能判定を返す際に対象の飲み物の在庫を1減らす

### 今回実装したリファタリングの要件
・ 飲

元記事を表示

If you want to see the backtrace, please set *** environmental variable xcode の見方

Xcodeの”Edit Scheme”(シミュレーターを選ぶボタンの左をクリック)からenvironmental variableをセットして、バグコードを再実行すると、コンソールにバックトレース(バグににどのようにして到達したか)が表示されます。

![スクリーンショット 2020-11-07 23.23.30.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/235259/57360cf5-f221-6933-aae1-6824b48844fd.png)
?
****
お仕事のご相談こちらまで
rockyshikoku@gmail.com

Core MLを使ったアプリを作っています。
機械学習関連の情報を発信しています。

[Twitter](https://twitter.com/JackdeS11)
[Medium](https://medium.com/@rockyshikoku)

元記事を表示

PDFを表示するビュワーアプリを作った

# TL;DR
* PDFKitのサンプルをSwiftUIで作成しました
* ページをめくるたびに今表示されているPDFのページ番号を取得します
* で、NotificatonCenterにaddObserveしてPDFViewからページ番号は取得します
* で、その場合ViewController時代ならViewDidLoadなどで登録したりできますが、どうしたらいいんだろう、、、

と言うあたりを解説します。

# デモ

[![Image from Gyazo](https://i.gyazo.com/496eac4f1e9a1cc88bc0a148d5941ca3.gif)](https://gyazo.com/496eac4f1e9a1cc88bc0a148d5941ca3)

ソースはこちら>https://github.com/dropcontrol/PDFViewer

# Viewの解説から

“`
struct ContentView: View {
@ObservedObject var pdfInfo: PDFInfo = PDFInfo()

元記事を表示

[iOS]モダンUICollectionViewを最速で理解して複雑な画面を作る(iOS13〜)

SwiftUIの進捗どうですか?私は進捗ダメです。

それはともかく、iOS13の登場とともに一部レイアウト方法がアップデートされました。
cell,sectionという概念にgroupというものが追加されて複雑な画面が構成できるようになりました。

こういった↓複雑な画面を、ちゃんと1個のUICollectionViewで表現できます。
[UIStackView+ContainerView+UIScrollViewで複雑な画面を設計する](https://qiita.com/netetahito/items/f7026697c9e0b793d98d)

縦スクロールの中に横スクロールがあるからと言って、**UICollectionViewを入れ子にする必要もありません**。

例:

![Simulator Screen Shot – iPhone 12 – 2020-11-07 at 21.43.32.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/20784/3d3543d6-c95f-d730-8

元記事を表示

AutoReselect of UITableView

# 概要
Apple純正のNote(メモ)アプリを見ると、`UISplitViewController`を利用したMaster-Datailアプリケーションで`UITableView`において削除/挿入/移動が生じた際に、その後適切なセルが**再選択され、secondaryViewControllerが対応したデータにreplaceされます。**まるで標準挙動かのような自然な動きに感じますが、これはAppleNoteチームの独自実装のため、私たちも自前で実装するしかありません。この記事では、`UITableView編集後の再選択`に対する知見と参考の実装を共有します。

# 目次

1. [再選択が必要な編集アクションの分類](#再選択が必要な編集アクションの分類)
2. [UITableViewのselectionとEditModeに関する考慮点](#UITableViewのselectionとEditModeに関する考慮点)
3. [方針の検討](#方針の検討)

#再選択が必要な編集アクションの分類
関係あるものだけ考慮すると以下の5パターンになると考えています。

基本的にCR

元記事を表示

SwiftUI – アプリ開発 それっぽくViewを並べてみた。

題名通り、それっぽくViewを並べてみました。
とりあえず配置してみただけですが、色々勉強できました。

今回は適当にViewを並べてみましたが、SwiftUIはpaddingやSpacerというものがあるおかげでViewを綺麗に配置できるのがかなりいいなと個人的に思いました。

コードで学べるものとしていくつかあげてみたので、興味があれば実装してみてください。

![SwiftUI-demo.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/274108/c2afae0b-b102-88f4-082e-c3f3d8784bfb.gif)

## 学べるもの
・Identifiableプロトコルの実装
・View間のデータの受け渡し
・@State,@Bindingを使うタイミング
・HStack, VStack, ScrollView
・各Viewが持つそれぞれのプロパティ
・ForEachの使い方
・画像を丸くする
・toggle()
 などなど

## 実装

### Identifiableプロ

元記事を表示

【Swift】Tab Bar Controller のBar Itemの順番を入れ替える方法【初心者】

#はじめに
Tab Bar Controllerの Bar Itemの移動方法がわからなかったので調べました。
メモとして記事に残しておこうと思います。

#Tab Bar ControllerをView Contorllerに繋ぐ
Bar Itemはsegueを繋いだ順に左から①②③と並びます。
![スクリーンショット 2020-11-06 18.13.17.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/683624/7acf952a-9010-3ca7-9c62-73e5e1326503.png)
この時に、本当は①③②の順番に並べたかったとします。

#間違えた順番のBar Itemの並び順の図
![スクリーンショット 2020-11-06 18.10.39.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/683624/3613c49e-325c-10a3-e31e-47fce6c29ffa.png)
#Bar It

元記事を表示

【GCD】Swiftにおける並列プログラミングの基本

#この記事は何か?
GCDを利用した並列プログラミングについて調べました。

###環境
macOS 10.15.7
Xcode 12.1
Swift 5.3

#用語
###スレッド
すべての iOS アプリケーションにはメインスレッドがあります。メインスレッドはUIを表示したり、発生するイベントに備えて待機します。
メインスレッドで複雑な計算をすると、処理が遅くなってアプリがフリーズするかもしれません。そのような場合に役立つのがマルチスレッドです。負荷が高いタスクをバックグラウンドスレッドに移し、タスクが完了するとメインスレッドに戻ってくる仕組みです。

###キュー
並列または直列になって、スレッドで実行されるのを待機している一連のコードブロックです。
Swiftでは**キューを管理するだけ**でよく、スレッドを意識する必要は全くありません。キューのコードを実行するために必要な**スレッドの提供および割り当ては、システムが行います。**

#Grand Central Dispatch: GCD
キューの管理を担当するAPIです。

###GCDの役割
– キューを作成する

元記事を表示

初学者の方は必見!エックスコードプロジェクトをGithubで管理する具体的な方法②

#概要
みなさん、こんにちは。

今回は、エックスコードプロジェクトをGithubで管理する具体的な方法②ということで、本記事は[[初学者の方は必見!エックスコードプロジェクトをGithubで管理する具体的な方法①]](https://qiita.com/syunta061689/items/2f5f846f7a1846cc29fa)の続きとなっております。

***※今回、お伝えする内容は、エックスコード上や省略コマンドで簡単にできたりもしますが、あくまでも、わかりやすさを追求し、今回は何がなんでもGitHubでの管理をしたい人のための記事となっております。あらかじめ、ご了承ください。***

この記事をみる前に、Gitをはじめからていねいにをみることをお勧めします!
https://github.com/takanabe/introduction-to-git

###環境

・Xcode – 11.3.1

・git – 2.26.0

・CLI – ターミナル

#ブランチをきって作業する

少し、前回の復習をしましょう。みなさんは、様々なコマンドを使ってエックスコードファイル

元記事を表示

PythonでiOSアプリアイコンに必要な画像サイズに自動でリサイズしてくれるプログラム

iOSアプリ開発するときにiPhone,iPadなどのサイズに合わせたアプリアイコンを作成しなきゃいけないと思います。
リサイズするのがとても面倒だったのでPythonでプログラムを作成しました。

## 前提条件

・pythonプログラム実行可能な環境であること。
・Python画像処理ライブラリ『Pillow』が利用可能な環境であること

## 概要
iOSアプリ開発時アイコン設定が必要な以下のピクセルに画像をリサイズ出力してくれます。
20px, 29px ,40px ,58px ,60px ,76px ,80px ,87px ,120px ,152px, 167px ,180px

※画像は1024pxの画像1つを用意することで、アプリに必要な画像サイズは全て揃うはずです。

## 使い方

1. リサイズしたい.png画像の名前をicon.pngにリネーム
(iconの名前、拡張子を変更したい場合は、プログラムのicon.pngを書き換えてください)

2. iconResize.pyと同じフォルダ内にicon.pngを配置

3. iconResize.py実行すると

元記事を表示

iPhoneだけでYouTubeライブコマースをする(Amazonアソシエイト編)

iPhoneだけでYouTubeライブコマースをする(Amazonアソシエイツ編)を説明します。
コロナ禍により、オンラインへ活動の場所を移す人が対象です。

– iPhoneだけでYouTubeライブを行う方法(チャンネル登録者数は1000人未満でも可)はコチラの投稿を参照してください。

– チャンネル登録数が1000人未満でもiPhoneでYouTubeライブ配信をする
https://qiita.com/rgbkids/items/7aa3250e0f802ad25cab

– Amazonアソシエイト
Amazonアソシエイトは、あのECサイト「Amazon」が行っているアフィリエイトプログラムです。あなたのサイトから商品が売れたら、その一部を報酬として受け取ることができます。

– すでにAmazonアソシエイトに登録している方は、商品リンク(テキストリンク)を作成し、YouTubeライブの動画説明欄に登録してください。
https://affiliate.amazon.co.jp/home
※全てiPhoneだけで操作できます。

– Amazonアソ

元記事を表示

PPAPの作業が面倒なのでiPhoneでカンタンに済ませたい

# Overview
ファイルをメール添付で送る時、

* ファイルをパスワード付きzipファイルに圧縮し
* メールに添付し、
* パスワードを別メールで送付します

という一連の作業が面倒くさいので、なんとかこれをやらずに済ませたい。

# 作っちゃいました

これらの一連の作業をほとんど手間かけずに行うことができるiOS向けのアプリ「PPAP Mailer」を公開しています。

アプリURL
[PPAP Mailer](https://apps.apple.com/ph/app/ppap-mailer/id1537350532?ign-mpt=uo%3D2)

# 使い方
## zipファイルに格納したいファイル選択
アプリを起動します。「ファイルを選択」ボタンを押すと、ファイル選択画面が表示されます。「ファイル」に格納されているファイルだけでなく、OneDriveやDropboxに入っているファイルも選ぶことができます。選択できるファイルは1つです。

![IMG_9878.PNG](https://qiita-image-store.s3.ap-northeast-1.am

元記事を表示

MapKitを使ってSwiftUI2.0でのdelegateの書き方のサンプルを作ってみた

# TL;DR
Objective-Cで書いていたSDKなどを使ったdelegateのサンプルをCoreLocation を参考に作ってみました。ソースはこちら> https://github.com/dropcontrol/LocationUpdata
またSwiftUIのProperty Wrapperを使った方法として`@ObservableObject`と`@ObserbedObject`を`@State`の代わりに使っています。実際は単一のViewの中でのPropertyの変更なので`@State`で充分なんですが。`@ObservableObject`を使う場合は複数のViewに跨ってPropertyの変更が必要な場合と言うことです。
参考:
https://rusutikaa.github.io/docs/developer.apple.com/documentation/swiftui/managing-model-data-in-your-app.html
https://capibara1969.com/2508/

# delegateをどう書くか?

アプリ自体

元記事を表示

[iOS] UIWebViewを使用するアプリのアップデート期限が延長されました

新規アプリはUIWebView APIが含まれているとApp Store Connectへのアップロードでエラーになります。

一方、既存アプリのアップデート期限に関しては「2020年12月」とアナウンスされていました。

参考リンク:
[[iOS] UIWebViewがいよいよヤバいらしい(”ITMS-90809: Deprecated API Usage”メールが届いた件)](https://qiita.com/y-some/items/1f9baeedd160f2d0fcbb)
[[速報] [iOS] UIWebViewが使えなくなる最終期限が告知されました](https://qiita.com/y-some/items/060492caa8a74db8107a)
[[iOS] UIWebView APIが含まれているライブラリを調べる方法](https://qiita.com/y-some/items/b1ea6eb37bd129d7aa8d)

これについて、[Apple Developer News](https://developer.apple.com/jp/news/

元記事を表示

初学者の方は必見!エックスコードプロジェクトをGithubで管理する具体的な方法

#概要
みなさん、こんにちは。

以前、2記事にわたってGithubのコマンドを解説をしました.

[githubを理解しよう! ①](https://qiita.com/syunta061689/items/ff80ab37641d6761d916)
[githubを理解しよう! ②](https://qiita.com/syunta061689/items/fb1cdc059cd543272c2f)

しかし、コマンドの意味を理解しても具体的にGithubに新規リポジトリを作成して、管理するまでの具体的な流れが理解できる情報は少ないです。
そこで、今回は、エックスコードプロジェクトをGithubで管理や簡単なbranchやcommit機能を使ってみようと思います!

***※今回、お伝えする内容は、エックスコード上で簡単にできたりもしますが、あくまでも、わかりやすさを追求し、今回は何がなんでもGitHubでの管理をしたい人のための記事となっております。あらかじめ、ご了承ください。***

この記事をみる前に、Git をはじめからていねいにをみることをお勧めします!
https://

元記事を表示

[Swift] textFieldの値が変更されたタイミングを取得

textFieldの値を更新するタイミングを取得したい、、、
textViewには値が更新するたびに呼ばれるメッソド`textViewDidChange(_:)`がありますが、textFieldにはないです。
自分で実装する必要があります

## 実装

`viewDidLoad`内に以下を記述。
これで、値が変更するたびに、`textFieldDidChange`が呼ばれるようになります。

“`swift

textField.addTarget(self, action: #selector(textFieldDidChange), for: .editingChanged)
“`
あとは`textFieldDidChange`を記述して終わりです。
`#selector`を使う際はメソッドの先頭に`@objc`をつけましょう

“`swift

@objc func textFieldDidChange(sender: UITextField) {
//任意の処理
}
“`

## 参考

https://stackove

元記事を表示

Module ‘SOMETHING’ was created for incompatible target arm64-apple-ios8.0 とでてiOSアプリがビルドできない

今まではビルドできていたアプリがXcode12にアップデートしてからエラーがでてiOSアプリがビルドできなくなりました。

# 環境

– Xcode12
– Carthage

# エラー

ビルドするとCarthageでインストールしているフレームワークのビルドエラーが出ました。
![スクリーンショット 2020-11-05 19.48.13.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/197742/70a55e2b-62f9-5b05-0a67-7eda7d91cdc9.png)

# 解決方法

以下を参考に targets > Build Settings の `Excluded Architecture` に `arm64` を追加するとビルドできるようになりました。

https://stackoverflow.com/questions/63607158/xcode-12-building-for-ios-simulator-but-linking-in-object-file-bu

元記事を表示

View間でのDelegateのパターン。またNavigationLinkを使ったページ遷移のサンプルを作った。

# ViewDelegatePattern(つい習慣でViewControllerって書いちゃったけど名前的にはこっちの方がいい)
View間でのDelegateのパターン。またNavigationLinkを使ったページ遷移のサンプルにもなっている。

レポジトリはここ>https://github.com/dropcontrol/ViewControllerDelegatePattern
この記事自体もレポジトリのREADME.mdと同じ。

## TL;DR

View間で値を渡すパターン。Viewを二つ用意。親から子へ渡すパターンと、子から親へ渡すパターンの2つを実装。値の渡し方は他にもあると思うけど、一番基本的なパターン。

## 親から子へ渡す場合

子であるSecondView.swiftに以下を追加

“`
let text: String = “Not Success” // 初期値が必要
“`

今回の場合親からNavigation Linkを使って呼び出してるので、destinationに登録したSecondView()の中でtextに文字列を渡している。

`

元記事を表示

【Nuxt.js】iOSでブラウザバックした時、元のスクロール位置に戻らない

(もっといい方法があれば教えて下さい!!?)
## 概要
Nuxt.jsプロジェクトで、外部ページに遷移してブラウザバックをしたところ、
画面最上部に戻されてしまったので対策。

## 結論
ホームディレクトリに`app/router.scrollBehavior.js`を追加し、下記のコードを実装

“`app/router.scrollBehavior.js
if (process.client) {
if (‘scrollRestoration’ in window.history) {
window.addEventListener(‘load’, () => {
window.history.scrollRestoration = ‘auto’
})
}
}
“`

## 理由
スクロール位置の復元設定が既存の`router.scrollBehavior.js`で実装されているが、
iosだとbeforeunloadが発火しない。
なので、window.history.scrollRestorationがautoに設定されず、
wind

元記事を表示

OTHERカテゴリの最新記事