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

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

【iOS14】UITableViewをUICollectionViewに書き換える練習

UITableViewが非推奨の方向らしい?

資料を参考にすれど、む・・・むずかしい。

https://qiita.com/shiz/items/4227accc7d13ae439d1d

こういうときは、簡単なサンプルを書いてみようと思い
そういう事をされている方の記事を見つけました。

https://qiita.com/hiiragi252/items/70b02bf22bec51f3b97a

この記事を参考に、今回はセクションを使わない
UICollectionLayoutListConfiguration.Appearance.plain
なものを作りたかったので、先程の記事コードを参考に改変させていただいた結果がこちらです。

自分の分かる範囲では、Sectionは完全に消せなかったのでIntにして
layoutConfig.headerMode = .none としてみました。

【新しい疑問点】
dataSourceは新しくなったけどdelega

元記事を表示

Info.plistからバージョン情報を取得する

バージョン情報の取得方法

# VersionNameの場合(1.2.3.4的なやつ)
“`
VERSION_NAME=(`/usr/libexec/PlistBuddy -c “Print CFBundleShortVersionString” hoge.app/Contents/Info.plist`)
echo $VERSION_NAME
“`
VersionCodeの場合は、CFBundleShortVersionStringをCFBundleVersionに置き換える。

元記事を表示

Apple Silicon (M1) の pod install エラーの直し方

## 概要
話題のM1チップ搭載のMacを購入したので、早速Xcodeで開発をしようとしたところ Pods が動かない問題があり結構ハマったので記録として残します。将来的にはCocoapods 側で改善されることを願います。

## 環境
– 動作確認日は `2021/08/14`
– M1チップのMacBook Air
– ターミナルは基本的にrosettaを利用しないiTerms2
– homebrewをインストールして、anyenv経由でrbenvをインストール
– rbenvで2.6.8をインストールしてglobalに設定
– rbenvで入れたrubyにcocoapodsをインストール

## 問題
Mac (M1) で `pod install` がエラーで失敗する。

“`console
(下記はイメージ。ログ残してなかったので他所から拝借)
LoadError – dlsym(0x7f8926035eb0, Init_ffi_c): symbol not found – /Library/Ruby/Gems/2.6.0/gems/ffi-1.13.1/lib/ffi_

元記事を表示

【Swift】SPAで作られたwebページをWebViewで扱う

#何が問題か?

WebView内のコンテンツがSPA(Single Page Application)で作られていると、ページ遷移しても期待したように`WKWebView`の`delegate`が呼ばれない場合があります。SPAは最初にhtmlを取得したらJavaScriptによって画面の書き換えを行うので、webページの読み込みが初回のみしか発生しないためです。

例えばwebコンテンツがページ遷移するたび、htmlの`title`タグの情報を取得し`navigationItem.title`にセットする場合を考えます。

普通のwebページなら読み込み完了のタイミングで以下のように`title`をセットするので問題ありませんが、SPAだとこの`delegate`は初回のみしか呼ばれません。そのため最初にセットされた`title`が`navigationItem`に残り続け、遷移先の`title`は`navigationItem`に反映されません。

“`swift
func webView(_ webView: WKWebView, didFinish navigation:

元記事を表示

Develop in Swift Fundamentalsについて

#swiftの資格
転職のために少しでも技術を証明するものを探していたところ、iosアプリ開発の言語であるswiftには
App Development With Swiftというapple主催の民間資格があること知り、取得を予定していました。
qittaでも1記事しか見つからなかったのでかなりマイナーな資格なのでしょう。

###App Development With Swift 概要

試験名:App Development with Swift
科目名:App Development with Swift Level.1
試験の言語:英語
所要時間:50分
受験料:一般¥10,780(税込)/学割¥8,580(税込)
試験実施方式:CBT試験

>[試験案内公式](https://www.odyssey-com.co.jp/app-dev-with-swift/)

所要時間50分で10780円の民間試験って高く感じます。
去年受けた気象予報士試験は試験時間6時間くらいで11140円の国家資格でした。(まあ落ちてますが)

#App Development With Swi

元記事を表示

【iOS15】タブバーの背景を有効にしたい

### 注意
執筆時点でベータ版を扱っているため、正式版と挙動が異なる可能性があります。

# UITabBarAppearanceを使う

“`Sample.swift

let appearance = UITabBarAppearance()
appearance.backgroundColor = UIColor.gray
tabBar.standardAppearance = appearance
tabBar.scrollEdgeAppearance = appearance

“`

# 環境
– Xcode 13.0 beta 5
– iOS 15.0

# 背景
`iOS 15`から`UITabBar`の背景が取り除かれたため、明示的に背景色を指定する必要があった。

– UITabBarについて
– WWDC2021のビデオ 5:40〜 https://developer.apple.com/videos/play/wwdc2021/10059/

# 実装にあたり
`UITabBar`クラスの`standardAppearance (iOS

元記事を表示

【Swift】Pusherを使ってリアルタイム双方向通信を実現する

## Pusherとは
[公式Webサイト](https://pusher.com/channels/pricing)
– WebSocketを用いてリアルタイムの双方向通信機能をWebやモバイルアプリに組み込むサービス

※今回はモバイル側の実装のみ書いています

## PusherをiOSに組み込む
### ライブラリの導入
[PusherSwift](https://github.com/pusher/pusher-websocket-swift) を使用する。

– PodfileにPusherSwiftを追加する

“`Podfile
pod ‘PusherSwift’
“`

## Swift側での受け取りを実装する
– Pusherのdataはjsonで定義して、フロントでは構造体にマッピングすると使いやすいです

“`swift
private func setObservePusher() {
pusher = Pusher(key: “APP_KEY”)
let channelName: String = “CHANNEL_NAME”

元記事を表示

[Swift5] FireStoreでカスタムオブジェクトを扱う

# はじめに
[Cloud Firestore](https://firebase.google.com/docs/firestore?hl=ja)にデータを追加する際に、`Codable`を使用したいと思ったところ、サポートされているようなので確認してみました。備忘録です。

>Map または Dictionary オブジェクトを使うとドキュメントを表しにくいことが多いため、Cloud Firestore では、カスタムクラスを使ったドキュメント作成をサポートしています。Cloud Firestore は、オブジェクトをサポートされているデータ型に変換します。

参考: [Cloud Firestore にデータを追加する](https://firebase.google.com/docs/firestore/manage-data/add-data?hl=ja)

# 実装方法
以下、[公式ドキュメント](https://firebase.google.com/docs/firestore/manage-data/add-data?hl=ja)のコードを引用しています。

“`s

元記事を表示

[Swift5] セルの選択状態をカスタムする

# はじめに
UITableViewCellを使用しているときなどに、選択状態によって背景色やセル上のviewの表示/非表示を切り替えたいときがあると思います。
便利なメソッドがあるのでご参考までに。
内容が間違っていたり、もっと便利なやり方があればぜひ教えていただけると幸いです。

#実装方法
結論、[setSelected(_:animated:)](https://developer.apple.com/documentation/uikit/uitableviewcell/1623255-setselected)を使用するだけです。
以下のコードは、カスタムなUITableViewCellの選択状態によって背景色とラベルの表示/非表示を切り替えています。
selectedプロパティがセルの選択状態を持っているので、簡単に処理を切り替えられます。

“`swift
import UIKit

class CustomCell: UITableViewCell {

@IBOutlet private weak var titleLabel: UILabel!
@

元記事を表示

because it has an invalid code signature, inadequate entitlements or its profile has not been explicitly trusted by the user.と出た時の解決法

#はじめに
Apple Developerで証明書を作成しただけでは実機でRunできずド忘れして詰まったので、その解決法。

#起きた現象

![Screen Shot 2021-08-12 at 11.52.41 PM.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/300780/6d73a028-3004-1636-5210-8fc017654be1.png)

このようなエラーが起きてRunできない

#解決法

実機の設定Appから
一般 → プロファイルとデバイス管理で「Trust “Apple Development: XXXXX”」を押す。
そうすることでRunできるようになる

元記事を表示

[iOS] Firebase Crashlyticsを設定して使用してみる

# はじめに
[Firebase Crashlytics](https://firebase.google.com/docs/crashlytics?hl=ja)は、リアルタイムのクラッシュレポートツールであり、アプリの品質を保つための問題特定に役立ちます。
簡単に導入できるためアプリに導入してみたので手順をまとめました。
内容が間違っていたり、良い使用ケースなどを知っている方がいれば、ぜひ教えていただけると幸いです。

# 導入手順
####1. Firebaseをプロジェクトに追加する。
ここでは説明は省きます。
まだ追加していない方は[こちら](https://firebase.google.com/docs/crashlytics/get-started?hl=ja&platform=ios)をご参考。

####2. Googleアナリティクスを有効にする (推奨)。
クラッシュに遭遇していないユーザー数の表示、パンくずリストのログ、ベロシティ アラートなどの機能を利用するには、Firebase プロジェクトで Google アナリティクスを有効にする必要があります。
既存の

元記事を表示

Xcodeで”private key is not installed”と表示されたら

Xcode で Archive するときなどに private key is not installed と表示されたら

![01.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/33704/1e81acfd-a643-d02c-2be3-6f3e14344a29.jpeg)

Manage Certificates… から

![02.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/33704/ebfc7b62-e9fe-ec85-af0c-af1ab13a4118.jpeg)

Apple Distribution を追加します。

元記事を表示

【Tips】SidebarのAppearanceを動的に切り替える

traitCollection.horizontalSizeClassのcompactとregularで別々のappearanceをサイドバーに適応させたいようなケースがあります。FinderやMusicなど、Apple純正Appではよく見られます。

![IMG_E4281229A214-1.jpeg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/114709/82426e41-aed2-4e91-1f8c-72a91b2e2f63.jpeg)
(筆者のファイルアプリスクリーンショット)

このようなインターフェースは[iOS HIG](https://developer.apple.com/design/human-interface-guidelines/ios/bars/sidebars/)でもSidebarパターンとして言及されています。

> Apply the correct appearance to a sidebar. To create a sidebar, use the sidebar

元記事を表示

UISheetPresentationController を使ってみた

# はじめに

WWDC2021 で発表のあったハーフモーダルを実装することができる [UISheetPresentationController](https://developer.apple.com/documentation/uikit/uisheetpresentationcontroller?changes=_2_1) を使ってみたので、
使用方法と使ってみた感想などを綴っておきたいと思います。

これまでは [PanModal](https://github.com/slackhq/PanModal) や [FloatingPanel](https://github.com/scenee/FloatingPanel) 等のライブラリを使って実装していましたが、
公式でもサポートされたようなので使い勝手を調べてみました。

## 環境

Xcode: 13.0 beta 4 (13A5201i)
Swift: Swift5
iOS: iOS15(public beta 4)

# 使用方法

以下のようにするだけで簡単にモーダル画面を実装することができます。

“`sw

元記事を表示

Darkモード, Lightモードを切り替えた時の挙動

# Darkモード, Lightモードを切り替えた時の挙動

Darkモード、Lightモードを切り替えた時のViewの更新処理をコードで行いたい時ってどうしたらいいのかな、と思い調べたのでメモ。

## 再描画メソッドをオーバーライドする
Darkモードを切り替えると自動的にiOSからViewへ再描画するよう指示がいく。
その時実行されるメソッドと順序は以下のとおり。

– NSView
– updateLayer()
– draw(_:)
– layout()
– updateConstraints()

– UIView
– traitCollectionDidChange(_:)
– layoutSubviews()
– draw(_:)
– updateConstraints()
– tintColorDidChange()
– UIViewController
– traitCollectionDidChange(_:)
– updateViewConstraints()
– viewWillLayoutSubviews()

元記事を表示

Apple純正メールアプリのようなロングプレスによる複数選択を実装する

## やりたいこと
標準メールアプリのような長押しでドラッグすると
複数選択ができるUIを実現したい

## アプローチ① 提供されているAPIを使う

### 方針

iOS13以降ではTableView、CollectionViewに2本指タップを検出し複数選択を実現するためのAPIが提供されています。
[Selecting Multiple Items with a Two-Finger Pan Gesture](https://developer.apple.com/documentation/uikit/uitableviewdelegate/selecting_multiple_items_with_a_two-finger_pan_gesture)

上記に書いてある方法で簡単に

– 複数選択のUI
– 選択されたセルの管理
– 画面の端までスクロールしたときの自動スクロール

を実現できます。
なお、このアプローチの場合2本指タップをトリガーに複数選択が始まります。

### 実装

“`swift:DefaultSmoothSelectableViewContro

元記事を表示

[iOS]AVAssetWriter+swifterでHLS配信

# iOS で AVAssetWriter + swifter で HLS 配信
* iOS14 から AVAssetWriter に fragmented MPEG-4 ファイルを出力する機能が追加されました!!!

https://developer.apple.com/documentation/avfoundation/avfiletypeprofile/3563936-mpeg4applehls?changes=_6

* [swifter](https://github.com/httpswift/swifter) を使って httpサーバを起動し、 AVAssetWriter で作成した fragmented MPEG-4 ファイルを配布することで、iPhone から HLS で映像配信する事が可能です

# 関連リンク
* リポジトリはこちら

https://github.com/fuziki/VideoCreator

* Apple のゲームアプリのテンプレートの画面を配信する事が可能です

元記事を表示

FirebaseCrashlyticsのレポート収集&送信をコントロールする

## 概要
iOSやAndroidでクラッシュ情報を収集するために、FirebaseCrashlyticsを利用されている方は多いと思います。
FirebaseCrashlyticsはデフォルトではクラッシュレポートの収集・送信を全て自動的に行ってくれますが、

* ユーザーの同意を得た上で収集&送信をしたい
* 収集&送信をコントロールしたい

など、開発者側でコントロールをしたいというニーズが発生することがあるかと思います。
この記事では、これらのコントロールを行う方法を紹介させていただきたいと思います。

## 前提
本記事はFirebaseCrashlytics 8.0.0 の情報を元に記載しています。
今後のバージョンアップなどにより動作が異なる場合があるので、ご注意ください。

## クラッシュレポートの自動収集を停止する
クラッシュレポートの自動収集を停止するには、以下のいずれかの対応が必要です。

1. `Info.plist` の FirebaseCrashlyticsCollectionEnabled キーに対して、false(Bool

元記事を表示

コピペで乗り切るエンジニアがSwiftUIを勉強してみた(ファイル構成について)

さて、前回SwiftUIの実行環境を用意しました。
SwiftUIのファイル構成と軽くソースの解析を
「Hello world」を使って確認していきます。
(前回:[コピペで乗り切るエンジニアがSwiftUIを勉強してみた(環境構築編)](https://qiita.com/antk/items/4bd97f0baa770ecef870))

## ファイル構成について
プロジェクトをつくった際にデフォルトでたくさんファイル作成される。

* TestHelloWorld
* TestHelloWorldApp.swift
作成するアプリケーションのエントリポイント。
@mainと記述された箇所が該当。

* ContentView.swift
作成するアプリケーションのビューの役割。
画面に表示す

元記事を表示

【すぐにインストールできるよ!】iOSホームからアイコン押すだけで、退勤・休憩を打刻できるようにした【Slackに打刻】

新しい会社に入社しました :tada::sparkles::sparkles:

ありがとう! ありがとう!

でも完全週休3日だったので、扱いがフリーランスになり、既存の打刻システムが使えないとのこと!
グワーーーーッ!!!

なので自分で、iOSのショートカットで実装しました!

Slackで業務の打刻をしている非正社員のみなさんも、つかってみてください><

# 結

まずこれ

– ![2021-08-07 11.21.58.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/84945/6323c63e-d828-2127-5a4d-ebd22d657a2e.png)

次のものをインストールし

– ライブラリ
– https://www.icloud.com/shortcuts/f2f41d62af1d46cebc1c9bf0361bf51c
– https://www.icloud.com/shortcuts/a17314510004488bb3293ad5cd5b8369

元記事を表示

OTHERカテゴリの最新記事