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

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

IDE上でiOSのアプリ起動ができなくなった場合のtips

この場合、IDEの実行ボタンではなくコンソールで`flutter run`すると起動できます。
※こんなエラーが出ます

“`
Launching lib/main.dart on iPhone 11 Pro Max in debug mode…
Warning: CocoaPods is installed but broken. Skipping pod install.
You appear to have CocoaPods installed but it is not working.
This can happen if the version of Ruby that CocoaPods was installed with is different from the one being used to invoke it.
This can usually be fixed by re-installing CocoaPods. For more info, see https://github.com/flutter/flutter/issues/

元記事を表示

UIKitでたまに遭遇するけど忘れがちなTipsメモ

UIKitで、たまに遭遇するけど忘れがちな部分をメモっておきます。

# ViewやCell等でControlイベントが取れない場合のチェックリスト

– イベントを取りたいViewの `isInteractionEnabled` がtrueになってるか?
– イベントを取りたいViewの `alpha` が0になっていないか?
– `backgroundColor = .clear`にして、UIView.alphaは0より大きく設定する
– イベントを取りたいViewの上に、透明系のViewが被さってて、それがイベントを奪っていないか?
– storyboardでUIViewを作成すると、デフォルトでisInteractionEnabled=trueになっている
– storyboardでなくても、コードで追加したUIViewも同様
– イベントを透過させたいUIViewは、isInteractionEnabledをfalseにする
– そもそも`override func hitTest()`は取れてるか?
– `pointInside()`
– 参考: [ht

元記事を表示

【Swift】ファイル操作で保存されたファイルやパスを色んな形式で確認してみる

# はじめに
※この記事は[LIFULL Advent Calendar 2021](https://qiita.com/advent-calendar/2021/lifull)の2日目の記事となります。

個人でiOSアプリ開発をしているときに、アプリ内でファイル操作をしたいときがあって、ほしい値を見たい時にどれを参照するのかがごっちゃになるのでまとめました。

# 前提
今回はDocumentディレクトリに日付のディレクトリを作成し、その中に動画ファイルがあるという状態で考えました。
※↓の階層はDocumentから始まっていますが、実際にはもっと階層は上にもあります。

“`plaintext
Document/
├── 20211124/
│ ├── hogehoge.mov
│ └── fugafuga.mov
└── 20211126/
├── hogehoge.mov
└── hugahuga.mov
“`

# 準備
## ディレクトリ作成
今回はDocumentsディレクトリに作成します。

“`swift
guard let docu

元記事を表示

チュートリアル「AWS Amplifyを使用してシンプルなiOSアプリケーションを構築する」をやる際に隣で開いておくとヒントになるかもしれないページ

# 目的
このページでは、AWSから提供されている以下のチュートリアルを試行錯誤の末にクリアした時の情報を共有致します。
公式ページの情報が一部古く、今だと書いてある通りにはできない箇所もあったので、その辺りでどなたかの助けになればいいなと思って書きます。

https://aws.amazon.com/jp/getting-started/hands-on/build-ios-app-amplify/

# 前提
– AWSのアカウントは既に持っていること
– Mac端末を持っていること
– Xcodeがインストール済みであること
– AnacondaもしくはDocker等で仮想環境を作成できること

# 私の環境
– MacBook Pro (macOS Big Sur ver. 11.5.2)
– Xcode ver. 12.4 (12D4e)
– Anaconda Navigator 2.0.3

# 1/7 今回開発に使う仮想環境を作成する。
必須ではないと思いますが、クリーンな環境で開発した方が無駄なつまづきを防げます。
ライブラリやパッケージの依存関係ではできるだけ悩みた

元記事を表示

iOSアプリのクラッシュを減らしアプリを安定運用(したい)[Carefully Unwrapping]

## はじめに

本記事は [with Advent Calendar 2021](https://qiita.com/advent-calendar/2021/with) 2日目の記事です。

こんにちは。[with](https://with.is/welcome)でアプリ開発をしている @zrn-ns です。
withアドベントカレンダーの2日目を担当させていただきます。

## 注意

この記事で取り上げた内容はまだ検証中です。
最後の方に課題も記載していますので、もし採用する際は十分にご検討いただくようお願いします。

## Optional型のアンラップ、どうしてますか?

早速ですが、Optional型をアンラップするとき、どのような方針をとっていますか?
もちろん場合によって様々だと思いますが、たまにどうアンラップするか悩むことってないですか。

たとえば下記のような、ほぼ確実にアンラップに成功する気がするけど、どういうパターンでアンラップに失敗するのか分からない…っていうパターンです。

“`swift
// stringにどんな値を入れればnilになる…?

元記事を表示

動画からスライドを自動生成するアプリを作りました

この記事は [クソアプリアドベントカレンダー2](https://qiita.com/advent-calendar/2021/kuso-app) の2日目の記事です。今まで傍から見ているだけでしたがついに初参加できて嬉しいです。

## 課題: 動画よりもスライドでサクサク見たい

WWDCセッションの内容をチェックしては発信する、ということを毎年やっている [^wwdc] のですが、なぜか昨年(2020)あたりからセッションの**スライドPDFが公開されなく**なりました。

セッションの動画は例年通り公開されているのですが、

https://developer.apple.com/videos/

**動画よりもスライドのほうがシーク効率が圧倒的に良い**ので、やっぱりスライドが欲しい。[^want]

[^wwdc]: [OSS](https://github.com/shu223/iOS-10-Sampler)を作ったり、[本](https://shu223.booth.pm/items/1461791)を書いたり、[noteマガジン](https://note.com/s

元記事を表示

Flutterの開発環境構築方法(Mac)

## はじめに

本記事は [エムティーアイ Advent Calendar 2021](https://qiita.com/advent-calendar/2021/mti) の1日目の記事です。

Flutterの開発環境を構築する方法を紹介します。

ちなみに業務ではFlutterを一切触っていません。
昨日行われた [FlutterKaigi](https://flutterkaigi.jp/#/) のハンズオンで初めてFlutterを触り、その準備時に行ったことを残します。

## 環境

– OS:macOS Big Sur 11.6
– ハード:MacBook Air (M1, 2020)
– Flutter:2.5.1

## 開発環境の構築

公式ドキュメントに沿ってFlutterの開発環境を構築します。

https://docs.flutter.dev/get-started/install/macos

### Flutter SDKのダウンロード

以下のページから、使いたいバージョンのFlutter SDKをダウンロードします。

https://docs.

元記事を表示

Factory Method パターンについてまとめてみた【Swiftでデザインパターン攻略 #1】

## はじめに
本記事では、GoFの23種類のデザインパターンの1つでもある、FactoryMethodパターンについて書いてみました。

## FactoryMethodパターンとは

#### 概要
「インスタンスの生成をサブクラスに実行させ、柔軟にインスタンス生成を行うためのパターン」のことです。
インスタンスを生成する側は、インスタンスについて直接意識しなくても、利用することができます。(Protocolを介しているため)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/580445/dff358a2-4986-d6c0-8d8d-6f06eb8dbbfd.png)
[Wikipediaより](https://ja.wikipedia.org/wiki/Factory_Method_パターン)

このパターンの進化前(?)のパターンで、**Factoryパターン(SimpleFactory)**というのがあります。
Factoryパターンは、1つのファクトリの中で、オブジェクトの

元記事を表示

[Swift]async/awaitを使ってGitHubAPIを叩く(UIKit版)

## 概要
Swift5.5から新しく登場した`async/await`による非同期処理の学習で`GitHub API`を叩いてリポジトリを検索する機能を実装したので記事にします。

## 開発環境
Swift 5.5
Xcode 13.1

## サンプルプロジェクト
GitHubにPushしました。気になる方はご覧ください。
https://github.com/ken-sasaki-222/AsyncAwaitTrainingInUIKit
![QR_280408.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/643372/db75944b-f035-278d-b380-c0b299264fcb.png)

## レスポンスをもとにModelを作成
“`
{
“total_count”: 223653,
“incomplete_results”: false,
“items”: [
{
“id”: 44838949,
“node

元記事を表示

アプリ内バナーの実装・運用をできるだけ楽にする(Swift × microCMS)

# はじめに

アプリの規模が大きくなってくると、販促やお知らせ、チュートリアル導線などのためにアプリ内にバナーを表示したいケースが出てきます。

*(↑こういう画像バナーのイメージです)*

バナー表示に必要なのは「画像」「タップ時の遷移先URL」とシンプルですが、それなりの頻度でバナーを更新することを考えると運用ができるだけ楽になるようにホスティングしたい気持ちになってきます。

私がこれまで作っていた個人アプリでは、

* JSONファイルを適当なサーバーに置く
* Firebaseなどを利用してそれ専用のAPIを作る

などとしていましたが、更新が大変だったり、APIの管理が面倒だったりとモヤる点も多く、もっと良いソリューションがあるのではないかと感じていました。

この記事ではmicroCMSというサービスを利用して、バ

元記事を表示

Swift5 全予約語 (106語) の解説

ドキュメントから漏れている予約語もあるため、下記情報を統合してカウントしています。
* [The Swift Programming Language (Swift 5) Lexical Structure](https://developer.apple.com/library/content/documentation/Swift/Conceptual/Swift_Programming_Language/LexicalStructure.html#//apple_ref/doc/uid/TP40014097-CH30-ID413)
* [The Swift Programming Language (Swift 5) Summary of the Grammar](https://developer.apple.com/library/content/documentation/Swift/Conceptual/Swift_Programming_Language/zzSummaryOfTheGrammar.html#//apple_ref/doc/uid/TP40014097-

元記事を表示

【iOS】アプリ内でシステムログを取得したい

この記事は[NTTコムウェア Advent Calendar 2021](https://qiita.com/advent-calendar/2021/nttcomware) 1日目の記事です。

初日からかなりニッチな内容ですが、iOSでシステムログを取得する方法について考えます。

# ベータテストあるある
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2318187/2efdcafe-4a23-33c1-0ac3-cc4992fbdcb6.png)

そんなこと言われても解析のしようがない
せめてログをください…

という光景を社内で見たことはないでしょうか。

実際アプリをリリースする前にシステムログを取得してもらうのは容易ではないため、
ログをもらうのを諦めているケースは多いと思います。

# 今までのログ取得方法

iOSでシステムログを確認する方法としては

– Macにつないで、XCode経由で取得
– Macにつないで、Console.app経由で取得
– 端末の電

元記事を表示

UIViewControllerの一部だけをSwiftUIで構築した話

# 前書き

[ACCESS Advent Calender](https://qiita.com/advent-calendar/2021/access) 今年の1日目は@tonionagauzziです。

1月に娘が生まれて、コロナ禍での育児1年生でしたが、会社や周囲の手厚いサポートによって無事に過ごせました。この場を借りて、1年間お世話になった皆さんにお礼を申し上げます。

そしてようやく念願叶い、両家に顔見せに行った帰りの飛行機で、明後日投稿日じゃん!って気づいてスマホで記事書いてます。便利な時代になりましたね!

# やったこと

UIKitで書かれた歴史の長いiOSアプリがあります。最近、その Deployment Target が13.0に上がったので、**UIViewControllerの一部だけ**にSwiftUIを導入しました。

また、SwiftUIで、URLは青下線表示で押したらSafariが開くようにしました。

![名称未設定.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2

元記事を表示

SceneKitでサイコロを振る(Swift)

![Xcode-13.0](https://img.shields.io/badge/Xcode-13.0-brightgreen) ![Swift-5.5](https://img.shields.io/badge/Swift-5.5-brightgreen) ![iOS-15.0](https://img.shields.io/badge/iOS-15.0-brightgreen)

## はじめに
iOS アプリをつくっているとだれしも一度はサイコロを振りたい!と思ったことがあるはずです:sunglasses:今回は `SceneKit` を使ってサイコロを振ってみます。

完成形はこんな感じです。

元記事を表示

iOSのアップデートをブロックするには

#iOSのOTAアップデートをブロックする方法

##①サーバーの通信をブロックする
以下のドメインをルーターなどのブラックリストに登録して通信出来ないようにしてください。
[Appleのサイト](https://support.apple.com/ja-jp/HT210060)に記載されているドメインです。

“`
appldnld.apple.com
gg.apple.com
mesu.apple.com
updates-http.cdn-apple.com
updates.cdn-apple.com
xp.apple.com
“`

###•メリット
①通信をブロックする事で強制的に解決することができる。

###•デメリット
①Appleの一部のサービス(iCloud等)で不具合が起こる可能性がある。

>##② TVOSのプロファイルを使用する(現在は不可)
>これが一番簡単で確実な方法です。
以下のサイトからプロファイルをダウンロードしてください。

>[Download Beta Profiles](https://betaprofiles.com/tvos/)

元記事を表示

iOSで位置情報やモーションを使うのときの権限要求あれこれ

仕事でiOSアプリを作っていて、妙なところでハマってしまったので備忘録までに。

* 位置情報やモーション フィットネスを使うための事前設定
* 任意のタイミングで許諾を求める処理
* アプリを開いたときの権限不足チェック

# 位置情報やモーション フィットネスを使うための事前設定
アプリを作成したら、info.plistに位置情報とモーションの項目を追加します
![スクリーンショット 2021-11-30 7.25.07.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/924658/9abfc324-4fdc-ce2d-7b56-bbf99f643411.png)

Targets > Signing&Capabilitiesの左上の「+Capability」からBackgroundModesを選択すると項目が追加されます
![スクリーンショット 2021-11-30 7.25.54.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.

元記事を表示

Xcode13から出るConditional downcast from ‘String?’ to ‘String’ does nothingについて

![Xcode-13.0](https://img.shields.io/badge/Xcode-13.0-brightgreen) ![Swift-5.5](https://img.shields.io/badge/Swift-5.5-brightgreen) ![iOS-15.0](https://img.shields.io/badge/iOS-15.0-brightgreen)

## はじめに
Xcode13 で以下のような不思議な警告が出るようになってたので共有しときます(原因わかる方いたらぜひ教えて下さい:bow:)。

`Conditional downcast from ‘String?’ to ‘String’ does nothing`

hoge

## 現象
やっていることは `hoge?.first

元記事を表示

【Xcode】ファイルを作成する時のSwift FileとCocoa Touch Classの違い

初投稿です。
基本備忘録ですが、同じ疑問を持った方の為になれば幸いです。

今回はXcodeでファイルを作成する時に選択する「Swift File」と「Cocoa Touch Class」の違いをまとめてみました。

結論から申しますと、ファイル作成時にテンプレートがあるかないかだけの違いみたいです。
まず「Swift File」から見ていきましょう。

## Swift File
「Swift File」を作成すると下記のような記述がされたファイルが作成されます。
 ※コメント部分は省略しています。

“`swift
import Foundation
“`

上記のようにこの一行だけ記述されたファイルが作成されます。

## 「Cocoa Touch Class」

次に「Cocoa Touch Class」はどうでしょう。
「Cocoa Touch Class」を作成する場合は作成時にSub class(継承するクラス)を指定する必要があります。
ここではUITableViewControllerを指定しています。
 ※ここでもコメント部分は省略しています。

“`Swif

元記事を表示

【Swift】タイトルのフォントと文字サイズと文字色を同時指定する方法

SwiftでNavigationBarのタイトルのフォントと文字サイズと文字色を同時指定する方法。

同時指定する方法を解説している記事がなかったのでメモとして残しておきます。

## 実装コード

“`swift
self.title = “タイトル”
self.navigationController?.navigationBar.titleTextAttributes = [
NSAttributedString.Key.font: UIFont.systemFont(ofSize: 40),
.foregroundColor: UIColor.white
]
“`
## 参考
https://developer.apple.com/documentation/uikit/uinavigationbar/1624953-titletextattributes

元記事を表示

iPhoneで写真を撮ったら自動的にDropboxに保存されるようにする2 #ヘルスケア #医療

以前こちらの記事でIFTTTを使って、iPhoneの背面カメラで撮った写真が自動的にDropboxで指定したフォルダに保存される仕組みを紹介しました。

https://qiita.com/naokiuc/items/e9850fcb0a93ec1f982e

その後、@tishiyamaさんの[この記事](https://qiita.com/tishiyama/items/62b8e5530414c1853e99)を読みiOSショートカットアプリを使えば簡単に同じ仕組みを実装できることを知り、実装して現場で試したので新たに記事にしようと思います。

今回はじめてiOSショートカットアプを知りましたが、こちらの記事によくまとまっています。

https://time-space.kddi.com/mobile/20210628/3134

#背景
私は訪問診療に携わる医師です。
訪問診療では通院困難な方の家に訪問して診療を行います。
クラウド型のカルテを使用していて、診察の際はプリントアウトしたカルテを持って行き現地で診察しながらカルテを書いて、診察終了後にカルテの写真を撮ってクリニ

元記事を表示

OTHERカテゴリの最新記事