iOS関連のことを調べてみた2021年01月23日

iOS関連のことを調べてみた2021年01月23日
目次

iOSショートカットAppでInstagramの画像動画保存機能を作ってみた

# はじめに
Instagramの写真や動画を保存できるサイト([Instadownloder](https://instadownloader.co/ja/)など)は存在しますが、投稿リンクをコピーしてサイトに貼り付けて、実行ボタンを押して、表示された画像をダウンロードといった手順が煩わしいと感じたためショートカットAppでの作成に取り掛かりました。このショートカットでは、投稿リンクをコピーして実行ボタンを押すだけで写真や動画のダウンロードまで行ってくれることを目指しました。

# 成果物
実際に作成したショートカットは[こちら](https://www.icloud.com/shortcuts/59f48abf287044ddb6387e715c32d80d)からダウンロードできます。
ダウンロードしたショートカットを使用するためには、設定から「信頼されていないショートカットを許可」を有効にする必要があります。
設定方法は、「設定>ショートカット>信頼されていないショートカットを許可」から行うことができます。尚、なんらかのショートカットを事前に一度実行させていないと信頼されていない

元記事を表示

XcodeのComponentsのSimulatorがdownload済みなのに使えない時の対処法

Xcodeをuninstallしてinstallしなおした時に、前のXcodeの情報が残っていたのでその対処法を備忘録として残しておきます。

# 現象
– `Add additional Simulators` または `Window -> Devices and Simulators -> Simulators -> +` でsimulatorを追加しようとしたところ、 `OS Version`の選択にiOS 10.3が表示されない

![スクリーンショット 2021-01-22 13.48.37.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/150615/6f86d44b-e205-248b-7af4-152662eed962.png)

– `Download Simulators` または `Xcode -> Preference -> Components` で確認するとiOS 10.3 Simulatorはダウンロード済みになっている

![スクリーンショット 2021-01-22 13.

元記事を表示

【Model I/O】MDLMeshオブジェクトから頂点データを取得する方法

Model I/Oフレームワークの、MDLMeshオブジェクトから頂点の情報を取得するのが面倒だったので、メモ。

参考:
Read vertex positions with Model I/O
https://gist.github.com/algal/8e31ce035af0aafebc3736661ae9e3cd

mdlMeshにMDLMeshオブジェクトの値が入っているとして、これをXcodeのデバッガ(LLDB)上で取得したい場合。

頂点の数を取得する。

“`swift:デバッガ
po mdlMesh.vertexCount
// 出力結果:54
“`

バッファのデータのstrideを確認する。

“`swift:デバッガ
po mdlMesh.vertexDescriptor.layouts.filter {($0 as! MDLVertexBufferLayout).stride != 0}
// 出力結果:
// ▿ 1 element
// – 0 :
`

元記事を表示

【SwiftUI】SwiftUI Appで`window.rootViewController`を用いた初期画面の表示

# はじめに
アプリの初期画面を`window.rootViewController`を用いて表示することは採用したアーキテクチャにもよると思いますが、よくあることかと思います。
ただし、プロジェクト作成時に`Life Cycle`で`SwiftUI App`を選択した場合に少し実装が必要だったため記しておきます。

# 実装
`SwiftUI App`でプロジェクトを作成すると、以下のようなファイルが生成されます。
このままだと`ContentView`が初期表示画面になってしまいます。
例えば`Coordinator`や`Rooter`パターン等を利用したい場合は`AppDelegate`や`SceneDelegate`を経由したくなります。

“`swift:SampleApp.swift
import SwiftUI

@main
struct SampleApp: App {
var body: some Scene {
WindowGroup {
ContentView()
}
}
}
“`

まず

元記事を表示

開発中のiOSアプリをiOSエンジニア以外にテストしてもらうにあたって

開発中のiOSアプリをiOSエンジニア以外にテストしてもらう際に、TestFlightやDeploygate, firebase app distributionなどの配布ツールを使って確認してもらうにあたって、iOSエンジニアが確認しておくことの備忘録

## TestFlight
### 内部テスター
– 内部テスターは100人まで
– チームでAccount Holder、Admin、App Manager、Developer、Marketingのいずれかの役割を担うメンバーを最大100人まで追加
– 追加するメールアドレスはAppleIDである必要がある
– テスターに配布する前にApple審査はなし
– アップロード、Appleサーバーでのビルド時間に30分〜1時間程度の時間がかかる
– 100デバイス制限あり

### 外部テスター
– 追加するメールアドレスはAppleIDである必要はなし
– Eメールアドレスを使用するか、任意のユーザーに対してAppのテストに参加する機会を開くパブリックリンクを有効にして共有
– 1万人までテスターを登録してアプリを配布できる

元記事を表示

HitTestを実施した際に、Containerが反応しない

# 問題

テスト環境でHitTestにてContainerを検出することを確認後、本番環境に実装を行った。
が、なぜかContainerがHitTestにて検出されない問題が発生した。

# 解決方法

Containerのcolorに透明な色を適用することで、HitTestにて検出されるようになった。

# 原因

Flutter.devのContainerのページにも記載があったが、colorに何もしていない場合、ContainerはHitTestにて検出されなくなってしまうみたい。

> By default, containers return false for all hit tests. If the color property is specified, the hit testing is handled by ColoredBox, which always returns true. If the decoration or foregroundDecoration properties are specified, hit testing is handle

元記事を表示

【覚書】iOS アプリ Code keyboard のショートカット一覧

## アプリ紹介

https://apps.apple.com/gb/app/code-keyboard/id1097372399?l=ja

コーディングに特化した iOS キーボードアプリ。
このアプリ、詳細な説明書とか一切ないのだが、一応特定のキーを押しっぱなしにすると、
コーディングで使用率の高い記号や演算子などを素早く入力できるようになっている。

この記事では、それらを一個一個検証して調べてみた。

## `abc` モード

“`
q w e r t y u i o p
a s d f g h j k l
[S] z x c v b n m [

元記事を表示

英語が苦手な人のためのXcode便利機能 SpellCheck

# はじめに
こんにちは!スーパー超絶英弱エンジニアのせーたろです!
profileをplofileと書いてしまう英語力の僕が、インターン先のつよつよエンジニアから教えてもらった便利機能を紹介します。

# Spell Checkの使い方
Xcode11から導入されたSpell Checkという機能を使います。
![スクリーンショット 2021-01-22 1.00.17.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/592713/2c22c240-1fa0-9ce2-227a-c5dadb91b391.png)

Edit < Format < Spelling and GrammarからCheck Spelling While Typingをオンにします。 これでスペルミスをしている箇所に赤い点線が表示されるようになります。 ![スクリーンショット 2021-01-22 1.03.54.png](https://qiita-image-store.s3.ap-northeast-1.amazona

元記事を表示

Swift Packageのバージョンを最新に解決できない

iOSアプリ開発のCI/CDを行うときは、xcode buildやfastlaneでビルドやテストを行うと思います。
その際にプロジェクト(ワークスペース)が参照しているSwift Packageがなかなか狙い通りに解決されなかったため、備忘録として残します。

## 関与してるパラメータ
#### Package.resolved
`XXX.xcodeproj/xcshareddata/swiftpm/Package.resolved` というパスにあるファイルです。基本的にはこのファイルがある場合は、このファイルに記載されているリビジョンのものがチェックアウトされます。

#### DerivedData
いわゆるビルド時の中間ファイルです。これがあると最新を取得してきてくれないことがあります。 このパスは指定することができるようで、fastlaneだと`cloned_source_packages_path`というパラメータで指定することができます。xcodebuildだと`clonedSourcePackagesDirPath`というパラメータです。

#### resolve

元記事を表示

iPhoneの壁紙に飽きたので、毎日ちがう壁紙を設定してほしい

iPhoneを使い始めてしばらく経ちましたが、壁紙を見飽きてしまいました。
毎日ちがう壁紙を設定したい!しかも自動で変更してほしい!もっと言えば、探すのも面倒なので、いい感じの壁紙を見繕って来てほしい!

ということで作りました。
比較的新しめのiPhone標準アプリ、**ショートカット**で夢を叶えることができました!

##いい感じの壁紙
今回は、[Bing](https://www.bing.com)の壁紙を使うことにしました。毎日いい感じに変わり、PC/スマホともに壁紙をダウンロードすることもできます。

##作成したショートカットを共有します
作成したショートカットの共有リンクを掲載しておきます。ご自由にお使いください。
https://www.icloud.com/shortcuts/1372925c0aa14d5399ae02c907d1be26

今回はBingを使いましたが、いい感じの画像をゲットできるAPIなどがあれば、お好みで上記ショートカットをカスタマイズしても良いと思います。
なお、壁紙の変更はiOS14.3以上のみ利用可能らしいです。(未確認)

##自動的

元記事を表示

【Swift】Combine + APIKit で複数リクエストを直列で実行するサンプル (ついでに並列も)

![title.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/6691/08dc09e3-ff8d-d19f-f324-61a0d28869e1.png)

Combine.frameworkを体験する取っ掛かりとして
APIKitのRequestにPublisherを生やして
複数の非同期通信を直列・並列で叩くサンプルを実装してみました。

まだまだCombineニュービーですのでオススメの方法や
間違い等有りましたらご指摘頂けると幸いです??‍♂️

## 環境
* Xcode 12.1
* APIKit 5.1.0
* SwiftUI

## サンプルコード
https://github.com/SatoshiN303/RequestsWithCombine

## プロジェクト構成
APIKitにPublisherを生やす実装方法については
Developers.IO さんの以下の記事が
非常にわかりやすかったのでほぼコピさせていただきました。
[[iOS 13] SwiftUI + Comb

元記事を表示

結局ScrollViewのConstraintってどうつければいいの?

> 1. UIScrollViewの上下左右をUIViewControllerのViewに合わせる
2. ContentViewの上下左右をContent Layout Guideに合わせる
3. ContentViewの横幅をFrame Layout Guideに合わせる(Equal Widths)
4. ContentViewにオブジェクトを追加して高さを確定させる

> 名前の通り、Content Layout GuideはUIScrollViewの中身、Frame Layout GuideはUIScrollViewのフレーム領域を示します。
> https://qiita.com/owen/items/2fab4a4482834b95e349

## つまづきやすかったこと
### ContentView は自分で UIView を追加して作る
UIViewで囲むのがセオリーとは思うものの、ちょっとAppleさん不親切‥

### Content Layout Guide の制約に注意
ContentView に Content Layout Guide の上下左右の制約をかけ

元記事を表示

[SwiftUI] SceneDelegate を消して ApplicationDelegate だけにする

# これはなに

iOS 13 環境で ReplayKit & UIScene の相性が悪いため、泣く泣く UISceneDelegate を消して UIApplicationDelegate だけにしたときのメモです。

[ReplayKit & UIScene: Assertion when calling RPSystemBroadcastPickerView · Issue \#438 · twilio/video\-quickstart\-ios](https://github.com/twilio/video-quickstart-ios/issues/438)

> If you must use RPSystemBroadcastPickerView then you should consider not using UIScene, and going back to UIApplicationDelegate.

# やったこと

## SceneDelegate をバッサリ削除

Info.plist から `UIApplicationSceneManifest

元記事を表示

ダークモードにまつわる誤解を解いておく

Githubがダークモードに対応したのが昨年12月。調べて見るところ我々開発者には「目に優しい」と認識されている一方、一般層には単に「格好いいモード」と思われていたりなようです。更にそれだけでもないという記事を見つけました。

## 概要
以下、流行ってるな~と思ったので、まとめました。「ダークモード」のメリット、デメリット。本当のところ。[GitHubをダークモードで使う](https://qiita.com/TerToEer_sho/items/7e14149c7172a2eb19c5)。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/93824/f77e6e14-4ee6-5ba9-b569-dfe95522d282.png)
[ダークモードに対応したデザイン](https://qiita.com/sugar_tk/items/54562d8756b69774aecf#%E3%83%80%E3%83%BC%E3%82%AF%E3%83%A2%E3%83%BC%E3%83%89%E3

元記事を表示

XcodegenでExcluded Architectureにarm64を設定する

Xcodegenを使用したプロジェクトで、arm64アーキテクチャでビルドしようとしたら以下のようなエラーになった。

“`
The linked framework ‘Pods_[アプリ名].framework’ is missing one or more architectures required by this target: arm64.
“`

調べてみたところ、`Build Settings > Architectures > Excluded Architecture`で、Any iOS Simulator SDKを選び、arm64を追加すれば直るとのこと。しかし、Xcodegenを使ってプロジェクトファイルを生成していたので、project.ymlでの書き方がわからず少しハマった。

以下のように、ターゲットのsettingsに対して、`EXCLUDED_ARCHS[sdk=iphonesimulator*]: arm64`としたら、うまく生成できたのでそのメモ。

“` project.yml
targets:
YourApp:
type: ap

元記事を表示

SwiftyTesseractとOpenCVを入れたら「duplicate symbol」しまくった話

タイトルの通り。`duplicate symbol`が出まくって面を食らったので解決策を備忘録として残しておきます。

# 環境情報

| 名前 | バージョン |
|—|—|
| Xcode | 12.3 (12C33) |
| Swift | 5.3.2 (swiftlang-1200.0.45 clang-1200.0.32.28) |
| SwiftyTesseract | 4.0.0 |
| CMake | 3.19.3 |
| Python | 2.7.16 |
| xcode-select | 2384 |
| OpenCV | 4.5.1 |

# SwiftyTesseractとOpenCVを同じプロジェクトで使う

二つを同じプロジェクトで使うための手順を示します。

## SwiftyTesseractをプロジェクトに追加する

2021年1月19日現在、[SwiftyTesseractはSwift Package Managerからしか追加できません](https://github.com/SwiftyTesseract/SwiftyTesseract#

元記事を表示

今更だけどUIViewの座標変換系メソッドを理解する(Swift)

![Xcode-12](https://img.shields.io/badge/Xcode-12-brightgreen) ![iOS-14.0](https://img.shields.io/badge/iOS-14.0-brightgreen) ![Swift-5.3](https://img.shields.io/badge/Swift-5.3-brightgreen)

## はじめに
ごくまれに `UIView` の convert 系のメソッドを使って座標を変換したいときがありますがいつもどっちに何指定するのかな?と忘れるのでまとめておきます。

## View 準備
下記のような構成で座標変換をしてみます。

xib

views【Swift5】iOSの設定アプリに遷移するための処理と注意点

# iOSの設定アプリに遷移させるための処理

“`swift
guard let url = URL(string: UIApplication.openSettingsURLString), UIApplication.shared.canOpenURL(url) else { return }
UIApplication.shared.open(url, options: [:], completionHandler: nil)
“`

# 注意点
## ①設定アプリに遷移するときの挙動

「設定アプリ」内にアプリ固有の設定項目がある場合は、アプリ固有の設定画面へ遷移します。

詳細な挙動については、下記の記事が参考になります。
[UIApplicationOpenSettingsURLStringから設定アプリを開いたときの挙動調査
](https://qiita.com/shtnkgm/items/3c32718b4ac7be4d2463)

## ②設定アプリの特定の画面に遷移させる処理(`App-Prefs:root= `)を使うとリジェクトされる

設定アプリの特定

元記事を表示

【Swift】 SpriteKit 入門 ②

SpriteKitの使い方を解説します。
[SpriteKit 入門 ①](https://qiita.com/tosssy/items/ef514ce1f12d497c9da8) で画像を表示させることができたので、続いて画像をドラッグして動かせるようにしていきたいと思います。
(環境:Xcode12.1  Swift5.3)

##画像をドラッグで移動させる
前回作成したMyScene.swiftファイルにコードを追加していきましょう。タッチされた画面上の位置は`touchesMoved()`で取得することができます。また画像(SpriteNode)をコードで操作できるようにMyScene.sksファイルにてNameを設定しておきます(ここではSampleImage)。
`self.childNode(withName: )`のwithNameプロパティには設定したNameを指定します。

![SK1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/

元記事を表示

UITableViewでcellを長押しして画面遷移する

###はじめに
UITableViewでcell長押しによる、画面遷移の実装に少し詰まったので、
longPressGestureRecognizerを用いて画面遷移する方法を記載します。

###実装方法
まずViewDidloadにてUILongPressGestureRecognizerの宣言を行います。

“`
override func viewDidLoad() {
super.viewDidLoad()

// UILongPressGestureRecognizerの宣言
let longPressRecognizer = UILongPressGestureRecognizer(target: self, action: #selector(ViewController.longPress(longPressGestureRecognizer:)))

// tableViewにrecognizerを設定
self.view.addGestureRecognizer(longPressR

元記事を表示

OTHERカテゴリの最新記事