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

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

【Swift】UIColorからRGBAの値を取得する

#はじめに
今回はUIColorからRGBAの値を取得する方法を紹介します。

#パターン1
cgColorでUIColorでCGColorのプロパティを扱えるようにし、componentsで取得する方法です。

“`swift
extension UIColor {

var redValue: CGFloat {
return self.cgColor.components![0]
}

var greenValue: CGFloat {
return self.cgColor.components![1]
}

var blueValue: CGFloat {
return self.cgColor.components![2]
}

var alphaValue: CGFloat {
return self.cgColor.components![3]
}
}
“`

“`swift
myView.backgroundColor = UI

元記事を表示

【Swift】コードで透明度を設定する

#はじめに
個人開発をしていてハマったのでまとめておきます。

#alpha
[alpha](https://developer.apple.com/documentation/uikit/uiview/1622417-alpha)についてです。
・0.0から1.0のCGFloat型
・0.0: 完全に透明 (transparent)
・1.0: 完全に不透明 (opaque)
・viewを透過する
・subView全てに影響

#opacity
[opacity](https://developer.apple.com/documentation/quartzcore/calayer/1410933-opacity)についてです。
・0.0から1.0のFloat型
・0.0: 完全に透明 (transparent)
・1.0: 完全に不透明 (opaque)
・色を透過する

#View自体の透過度を変更する(Viewのalpha)
View自体の透過度を変更するには、以下のように、alpha値を設定します。

“`swift
myView.alpha = 0.4
“`

しかし

元記事を表示

Flutter勉強用サンプル集

##作成済み(改良の余地しかない)

####テストアプリ
  電卓
  [simple_calc](https://github.com/gthmkt94/simple_calc)

##作成中
  なし

元記事を表示

Azure Pipelines で iOS ビルドの設定について

## 概要

iOSアプリのビルドをAzurePipelinesでCI/CD対応した際にP12およびプロビジョニングプロファイルの設定が必要になります。

そのため、P12およびプロビジョニングプロファイルの準備とAzurePipelinesに設定する方法をまとめます。

「Azure Pipelinesとは何か」などの初歩的な話は、過去にまとめた「[App Center と Azure Pipelines について](https://qiita.com/gremito/items/265d15d6fcf53db3db2d)」があるので割愛します。

また、公式ドキュメントに大筋があるので先にこちらを確認しておくと把握しやすいと思います。

– [Azure DevOps/Azure Pipelines/エコシステムと統合/Xcode アプリのビルド、テスト、デプロイ](https://docs.microsoft.com/ja-jp/azure/devops/pipelines/ecosystems/xcode?view=azure-devops)
– [Azure DevOps/A

元記事を表示

iPhoneで確認するとCSSが崩れている際の対処法

WEBアプリケーションの開発において、スマートフォンやタブレットでの使用を想定したレスポンシブデザイン化はマストです。
しかし、実際にコーディングしてみるとPCでは問題ないのに、スマートフォンで確認してみるとスタイルが崩れているケースがあります。

この記事では、実際に私が遭遇したケースをもとに、CSSで指定したスタイルがiPhone上で反映されていない際の対処法について紹介します。

#ボタンのスタイルが崩れている
以下のようなコードで、新規登録画面における入力内容の送信ボタンを設置しました。

HTML

“`

“`
CSS

“`
.form input[type=”submit”] {
cursor: pointer;
color: white;
background-color: #fa6d1b;
font-weight: 300;
width: 140p

元記事を表示

UITableViewにタグを並べて表示するようなセルを持たせる(画面回転対応版)

# 概要
UITableViewでUIを組んでいて、例えば検索キーワードなどをタグのUIにして並べるようなときに使えるテクニックを説明します。
タグUIの実装は、`isScrollEnabledをfalseにしたUICollectionView` で実装しています。
これはあくまで一例なので、もっといい方法があればぜひコメントいただければと思います。

# 気をつける点
ただUICollectionViewのUIをTableViewに持たせるだけなのであれば比較的簡単かと思われますが、iOSは画面回転などでCollectionViewの行数が変わり、当然CollectionViewのサイズ自体が変わります。
iPadに関してはSplit Viewでの表示やSlide Overでの表示でもCollectionViewサイズが変わります。
それらのUIの各種変更にも対応する形で実装していきます。

# 完成図
全体がUITableViewで、UITableViewの中にUICollectionView持ちのセルが含まれています。

|縦|横|
|—|—|
|![Simulator

元記事を表示

サーバーにアップロードされたファイルのサイズが0バイトになる

## 事象

ブラウザのFormからサーバーにアップロードされたファイルを確認すると、時々0バイトのファイルが存在する。
必ず0バイトになるわけではなく、正しくアップロードされることの方が多い。
ログを確認しても何らかのエラーが発生している様子はない。
ディスク容量は十分にある。
事象発生時のファイル名や拡張子、時間帯、元のファイルのサイズに共通点はない。

## 原因

iOSのバグ(14.6にて確認)。
ブラウザでファイルを選択した後、他のアプリを起動してブラウザをバックグラウンドにする、あるいはスマホをスリープさせるなどして、それからブラウザを再度表示してアップロードすると、iOSの機嫌次第で発生する(SafariでもChromeでも再現)。
おそらく、ブラウザがメモリから一時的に追い出されて復帰したときに起こるのであろう。

## 対策

サーバー側でファイルサイズ0バイトのチェックを行う。

Apple製品は作り込みが甘くてこういう厄介な問題を起こしがちなのが嫌なんだよなー。

元記事を表示

UnityAdsを利用したアプリをiOS14.5で申請した時にはまった話

## はじめに
UnityAdsなどの広告を表示する場合、ユーザのトラッキングに使用されるデータとしてIDや使用状況データを送信することになります。
iOS14から、初めてアプリを起動する場合に、広告にIDFA(広告用の識別ID)をアプリが提供することをユーザに示して許可を貰うことが必要となりました。

単純にこのダイアログを出力し、そのように対応するというだけの話ですが、それの申請が通るまでいろいろな問題が発生し、そのたびに頭を痛めしました。
そして無事申請が通りましたので、その過程を紹介します。

## AppTrackingTransparency対応
#### 開発環境
#### Buildでハマった
#### 確認でハマった
デフォルトでいいえだった問題。

単純にCodeを修正しても出力されない場合って、修正に問題があるか、或いは修正が足りなかったと思っちゃいますよね。
パターンを変え数回ビルドを試しましたが出力されず、再インストールして確認しても出力されず、

iOSアプリ審査でAppTrackingTransparency対応(ATT対応)を求められて焦ってやり方を探している方へ

1つのアプリで1回しかダイアログは

元記事を表示

#SwiftUIを使って学習がてらタイマーアプリを作ってみよう FIN

#SwiftUIを使って学習がてらタイマーアプリを作ってみよう Finish

###前置き 
前回投稿した[Part8](https://qiita.com/scream_episode/items/fb928f114de7a857b480)の続きです。
今回のゴールとしては
1.前回実装したPageViewContorllerに対応したインジゲータの実装
です。

今回の投稿で「SwiftUIを使って学習がてらタイマーアプリを作ってみよう」シリーズはひとまず完結とします。
(もしかしたら追加でなんかしたら続きを書く可能性は無きにしも非ず)
###開発環境
Mac (OS Big Sur version:11.3.1)
Xcode (version:12.5)
Swift (version: 5.4)
対象IOS(version:14.5以上)

## 今回の作業
### UIを決める
普通のページインジゲータ(PageContorl)は[チュートリアル](https://developer.apple.com/tutorials/swiftui/interfacing-with-

元記事を表示

クロージャ(無名関数)について

#・クロージャ(無名関数)とは
Swift実践入門(p.136)によれば、クロージャとは、再利用可能なひとまとまりの処理を指す。また、関数はクロージャの一種であるため、共通の仕様が数多くある。しかし、クロージャにはクロージャ式という定義方法によって名前が不要であったり、型推論によって型の記述が省略可能であったりと関数よりも手軽に定義することができる。

#・主な使用用途
主な使用用途としては、非同期通信がある。APIにリクエストを飛ばし、帰ってきたレスポンスを処理する際に利用することが多い。

#・定義方法

“`swift
{ (引数名1: 型, 引数名: 型…) -> 戻り値の型 in
クロージャの実行時に実行される文
必要に応じてreturn文で戻り値を返却する
}
“`

#・実行方法

“`swift
let some = { (num : Int) -> Int in
return num * 10
}

some(10) // 100
“`

#・引数の型としてのクロージャ
クロージャ:名前のない関数を変数や定数に代入する。
関数:変

元記事を表示

UserDefaultsの場所

# 概要

以下のように`UserDefaults.standard`に値を設定したとします。この値がちゃんとファイルに保存されているのを確認する方法です。

“`
if UserDefaults.standard.string( forKey: “theString” ) == nil {
UserDefaults.standard.set( “0123456789”, forKey: “theString” )
}
print( UserDefaults.standard.string( forKey: “theString” )! )
“`

# 検証環境

* Xcode 12.5.1

# Simulator の場合

以下にあります。

“`
~/Library/Developer/CoreSimulator/Devices//data/Containers/Data/Application//Library/Preferences/.plist
“`

元記事を表示

UITableViewCellがdeinitされるタイミング

## 検証

以下のようなコードでUITableViewCellのカスタムセルを作成し、
UITableViewのインスタンスメソッドである
・[register(_:forCellReuseIdentifier:)](https://developer.apple.com/documentation/uikit/uitableview/1614937-register)
・[dequeueReusableCell(withIdentifier:)](https://developer.apple.com/documentation/uikit/uitableview/1614891-dequeuereusablecell/)
の2つを使用してカスタムセルを表示させ、インスタンスが解放されるタイミングを検証してみた。

“`SampleTableViewCell.swift
final class SampleTableViewCell: UITableViewCell {

@IBOutlet private weak var titleLabel: UILab

元記事を表示

iOSクラッシュログ(.ipsファイル)のシンボル化チュートリアル

# 環境
– Xcode 12.5.1
– iOS 14.6
– iPhone 8

# 事前準備
– ipsファイルを取得するための実機を用意
– エラー発生用testアプリを作成
– 今回は画面にUIButtonを配置し、押すと`fatalError()`を実行するようにした

“`swift:ViewController.swift
import UIKit

class ViewController: UIViewController {
@IBAction func didTapErrorButton(_ sender: UIButton) {
fatalError(“an error occurs”)
}
}
“`

– testアプリをアーカイブ、AdHoc配信のipaを作成し、実機にインストール
– 今回は[Apple Configurator 2](https://apps.apple.com/jp/app/apple-configurator-2/id1037126344?mt=12)を使用し、インストールした

# 手

元記事を表示

AdHocアプリのクラッシュログ解析

# 概要
この記事では、AdHoc配布されたアプリ上で発生したクラッシュログを解析する方法について記載しています。

# AdHoc配布
AdHoc環境でのアプリ配布は、以下の様な方法があります。

1. [TestFlight](https://help.apple.com/app-store-connect/?lang=ja-jp#/devdc42b26b8)
2. [Firebaseテスト配布](https://firebase.google.com/docs/app-distribution/ios/distribute-console?hl=ja)
3. [DeployGate](https://deploygate.com/)

いずれの方法で配布した場合でも、以降で記載するクラッシュログ解析方法は適用可能です。

# クラッシュログを取得
この項目では、AdHoc環境で配布されたアプリのクラッシュファイルを実機端末から取得する方法を解説しています。

## ipsファイルの取得
アプリのクラッシュログは、`.ips`という拡張子ファイルに暗号化された情報が記載されているた

元記事を表示

クラッシュログ解析

# 概要
この記事では、iPhoneやiPadの実機端末からクラッシュログファイル(`xxx.ips`)を取得し、それをdSYMファイルで復号した中身の見方について記載しています。
なお、実機端末からクラッシュログを取得する方法については[AdHocアプリのクラッシュログ解析](https://qiita.com/yamataku29/items/7d529ee49c28cddbd89e)を確認してください。

# クラッシュログの見方
## 基本情報
– `Exception Type`: クラッシュの種別を示す文字列が表示される
– `Exception Codes`: クラッシュの種別に応じたコードが表示される
– `Exception Note`: クラッシュ種別に関する補足説明の文字列が表示される
– `Termination Reason`: クラッシュの原因が表示される
– `Termination Description`: クラッシュ原因の詳細情報が表示される

## バックトレース
– クラッシュスレッド: `Thread 0 Crashed:`といった様に`Cra

元記事を表示

SwiftUIを使って学習がてらタイマーアプリを作ってみよう8

#SwiftUIを使って学習がてらタイマーアプリを作ってみよう Part8

###前置き 
前回投稿した[Part7](https://qiita.com/scream_episode/items/abb2168fe66b90836443)の続きです。
今回のゴールとしては
1.UIKitのPageViewControllerを利用して設定画面を時間設定と音楽設定で分けて
表示する
です。

次回は[ページインジゲータをちょっとカスタムして実装です](https://qiita.com/scream_episode/items/7950d45a17f8f53b4094)

###開発環境
Mac (OS Big Sur version:11.3.1)
Xcode (version:12.5)
Swift (version: 5.4)
対象IOS(version:14.5以上)

## 今回の作業
### UIPageViewController(UIKit)をSwiftUIでも使えるように実装
基本はAppleが公開している[チュートリアル](https://developer.a

元記事を表示

【iOS】Metal Best Practicesの解説(5) バッファバインディング

[Metal Best Practices](https://developer.apple.com/library/archive/documentation/3DDrawing/Conceptual/MTLBestPracticesGuide/index.html#//apple_ref/doc/uid/TP40016642-CH27-SW1)は、iOS/MacOS/tvOSのAPIであるMetalを用いた設計のベストプラクティスガイドです。

本稿では、何回かに分けてこのガイドを読み解き、コード上での実験を交えて解説していきます。
読んでそのまま理解できそうなところは飛ばしますので、原文を読みながら原文のガイドとしてご利用下さい。
また、iOSの記事なので他のOS(MacOS, tvOS)についての記載は割愛します。

他の記事の一覧は、初回記事よりご覧下さい。

https://qiita.com/TokyoYoshida/items/521619d6d8dd8d8ef9e4

### [Buffer Bindings (バッファバインディング)](https://develo

元記事を表示

【iOS】Universal Links実装時にハマったこと

Universal Linksを実装した際にいくつかハマったことがあったので、覚書として残しておきます。

# 【おさらい】 Universal Linksとは
* iOS9〜利用可能
* 通常のWeb URL経由でアプリを起動できる
* アプリがインストール済み →アプリが起動する
* アプリが未インストール →Webページが開く
* Custom URL Schemeとは違って、`test-app://`のような起動用URLは不要
* 「アプリを開きますか?」などのポップアップは表示されず、シームレスにアプリに遷移する

参考: [URLスキーム・独自ディープリンク実装に代わる、Universal Links(iOS 9で導入)でより良いUXを実現 – Qiita](https://qiita.com/mono0926/items/2bf651246714f20df626)
参考: [iOS ディープリンク(Custom URL Scheme)でアプリを起動する | DevelopersIO](https://dev.classmethod.jp/articles/

元記事を表示

MBProgressHUD使用中にユーザー操作できるようにする

`isUserInteractionEnabled = false`にすることで、インジケーターやトーストを表示中にボタンタップなどの操作ができるようになる。

“` Swift
let toast = MBProgressHUD.showAdded(to: view, animated: true)
toast.isUserInteractionEnabled = false
“`

元記事を表示

adbコマンドまとめメモ

## adbとは
Googleの[Android開発者ページ](https://developer.android.com/studio/command-line/adb?hl=ja)によると、以下のように説明されています。

> Android Debug Bridge(adb)は、デバイスと通信するための多用途のコマンドライン ツールです。

Android開発者はもちろん、テスターやFlutter開発者にも使えるテクニックです。「こういったツールが用意されているから、iOSも好きだけどAndroidも良いよね」と感じます。

## 環境設定(adb: command not foundとなる場合)

adbコマンドが使えない場合は、以下の記事を参考にパスを通すこと

## 目的
最近adbコマンドを使う機会が増えてきたので個人的なまとめをQiita上に置いて置きたい。自分が使うものだけまとめたい。
最近、Qiitaがどこからでも参照出来て便利なことに気

元記事を表示

OTHERカテゴリの最新記事