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

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

Fastlaneでアプリのスクリーンショットを自動化してみた

## はじめに
1つ前の記事で、FastlaneでXCTestを自動化するという記事を書いたのですが、今回はその続きでアプリのスクリーンショットを自動化する記事を書いてみました。

https://qiita.com/ctnc_67/items/e5e0bae431b3025f4255

Fastlaneをこれから導入するという方は、Fastlane導入については前記事をご参照ください。
今回はsnapshotを撮るところだけに焦点を当てていきます。

あと、前提としてプロジェクトにXCUITestは導入されている前提で進めます。

## この記事で学べること
– snapshotとは?
– アプリのスクショの自動化(スナップショット)
– スクショ自動化のための細かいオプション

## Snapshot導入
### fastlaneのsnapshotとは
アプリのスクリーンショットを自分で実機やシュミレーターを操作しながら取得する作業を自動化してくれるツールです。

スマホアプリ開発において「色々な大きさの機種のスクショを全画面取得せよ!」なんていうミッションは、よく課せられると思い

元記事を表示

expoでiOSシュミレーターが開けない

ひさしぶりに環境の再構築をして[expo](https://expo.dev/)をインストールしたら下記のような表示が出てiOSシュミレータが起動しません。Xcodeはすでにインストール済みです。

“`
› Opening on iOS…
✔ Xcode needs to be installed (don’t worry, you won’t have to use it),
would you like to continue to the App Store? … (Y/n)
Unable to verify Xcode and Simulator installation.
“`

`xcode-select –install`をしてもすでにインストール済みと表示されます。

“`
❯ xcode-select –install
xcode-select: error: command line tools are already installed,
use “Software Update” to install updates
“`

## 解決方法

元記事を表示

iPhone iOS 15.1 の出力音質を引き上げる設定

iPhone iOS 15.1 の出力音質を引き上げる設定についてメモします。
iOS 15.1 はデフォルト設定では最高音質にはならないことがあり、以下のように設定変更が必要です。

## 前提条件

このメモは以下の環境で確認および記述しました。

* iPhone `iOS` `15.1` (iPhone SE 第一世代)
* `Roland Rubix22` (USB接続オーディオインタフェース)
* [Ruelen: iPhone Lightning – USBカメラアダプタ](https://www.amazon.co.jp/gp/product/B09C5DZC28) (手元にあったのでこれを利用。動作保証するものではありません)

# iPhone と DAC (Roland Rubix22) とを接続する

* iPhone と DAC とを接続します。
* 私は [Ruelen: iPhone Lightning – USBカメラアダプタ](https://www.amazon.co.jp/gp/product/B09C5DZC28) を利用して iPhone SE

元記事を表示

UIViewのドラッグ (生)

タップ検知方法は、
生のタップ情報から任意イベントを検知をする自由度が高い方法と、
UIGestureRecognizerが用意した基本タップイベントのテンプレートを使う方法
の主に二つがあるが、
前者の生でもドラッグ検知だけなら簡単ということがわかったので、試してみた。

## 実装

“`DraggableView.swift
import UIKit

// ドラッグだけ実装したヴュー
class DraggableView: UIView {
// ドラッグ検知メソッド
override func touchesMoved(_ touches: Set, with event: UIEvent?) {
guard let touch = touches.first else {// このビューへのタップ取得。ちなみにデフォルトではマルチタップのプロパティはfalseになってるので、ここではfirstのみ考えればおk。
assert(false)
}
let loc = t

元記事を表示

UIViewのドラッグ (UIGestureRecognizer)

タップイベント検知は、
生のタップイベント情報を操作するゴリゴリの方法もあるが、
基本的なタップイベントに関してはUIGestureRecognizerがテンプレートを用意してくれているので、使えるときはそちらを使いたい。

ドラッグに関しては、UIPanGestureRecognizerと言うテンプレートが用意されている。

# 実装
UIGestureRecognizerにアクションを設定して、Viewに持たせればおk。

“`ViewController.swift
import UIKit

class ViewController: UIViewController {

@IBOutlet weak var draggableView: UIView!

override func viewDidLoad() {
super.viewDidLoad()

let pGR = UIPanGestureRecognizer(target: self, action: #selector(dragging

元記事を表示

UIViewControllerのviewにxibを使用する

# 概要
xibfileから、UIViewControllerのviewのoutletを紐付ける。

# 手順
1.xibfileのfile’s ownerをViewControllerに指定する。これで、ViewControllerのviewのoutletがxibfile側から見えるようになる。
2.ViewControllerのviewのoutletに、xibfileのrootviewを紐付ける。
3.storyboardに紐づいているViewControllerの場合、storyboard側の実装が優先されるので、storyboard側ではViewControllerのviewを削除しておく。
Frameworks/dp/1492074616![スクリーンショット 2021-04-24 18.36.38.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/252245/2658a1a6-f504-03dd-d855-1218026f4367.png)

# 感想
こういうやり方もあるのかーと言った感じ。

元記事を表示

ios概論: View

# はじめに
iosの仕組みを概要的に説明することがモチベーションです。
想定読者はios〜中級者です。
仕組みをわかって実装するための、最低限の知識が体系的に得られるといいなあと思っております。

間違っていたらご指摘していただけると嬉しいです。
また、修正・追加して欲しい内容などございましたらこれもご指摘いただけるとありがたいです。

構成は以下になります。
1.View
2.Draw
3.Animation
4.Touch

Viewの根幹となる描画機能を3章まで説明し、最後にタッチ機能を説明します。

# 全体観
UIViewとはなんでしょうか?
ドキュメントを見てみると、たくさんのクラスやプロトコルから構成されているのがわかります。

https://developer.apple.com/documentation/uikit/uiview

![スクリーンショット 2021-04-25 17.11.44.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/252245/072169

元記事を表示

iOS概論

# 目次
[1. View](https://qiita.com/Zousaaaaaan/items/1d32dece850d1be707e9)
2. Inteface ※準備中
3. Framwork ※準備中

# モチベーション

まず、きっかけから話します。

わからない時にその都度調べるというのが、大部分のプログラマーの知識の獲得方法かと思います。
しかし、それでは体系的な知識が身に付いていかない体感があったので、ios業務のために一冊オライリーの参考書を読むことにしました。
結果、結構良かったです。体系的な知識が身に付きました。
また、本という枠に入った知識を知ることで必要な知識の輪郭が明確になった感じがしました。
これは個人的にはとても良くて、”技術者としての最低限知識はこの範囲。これ以上は都度調べればOK”と安心して割り切れるようになりました。

ということで本記事のモチベーションですが、
iosの仕組みを概要的に説明することです。
細かい実装テクニックなどは他の記事に任せて、仕組みをだーっと書いていきます。
また、ほぼ参考書からの知識になりますが、大

元記事を表示

コードで作るContainer View Controller

# はじめに
この記事の目的は、コードから、Container View Controllerを作れるようになることです。
子ViewControllerが一つである単純な例で説明を行います。
参考文献の書籍の内容です。

# Container View Controllerとは
UINavigationControllerやUITabBarControllerなどといった、ViewControllerヒエラルキーの親子関係の親になり、子ViewControllerのviewを表示するViewControllerのことです。

あんまり知らないですが、androidだとFragmentを持つActivityみたいな感じでしょうか??

# 方法
UIViewControllerでは、子ViewControllerを格納するための`children`プロパティが用意されていますが、直接扱うことは非推奨みたいです。
子ViewControllerを扱うには決まったお作法があり、それを破ると手痛い仕打ち(バグ)を受けるとのことです。
Container View Controllerは、こ

元記事を表示

[iOS]Cell, UIViewに影・丸み・輪郭線を追加すると角が影の上にはみ出てしまう / 影の表示のパフォーマンス改善

## はみ出てしまう事象

ポイントとしては、影を設定したLayer(が属するView)の上にさらにCellのcontentViewなど別のUIViewがあるとその角が影の上にはみ出してしまいます。

cell自体に影を設定した場合は、cellの上のcontentViewの`layer.masksToBounds` を`true`とすることで、はみ出しを防止できます。

“`swift:UIView+Layer.swift
import UIKit

public extension UIView {
/// 丸みの設定
func setUpRoundness(_ cornerRadius: CGFloat = 5.0) {
layer.cornerRadius = cornerRadius
}

/// 輪郭線の設定
func setUpBorderLine() {
layer.borderColor = ColorName.lightGrayMinus.color.cgColor
layer

元記事を表示

SFSymbolsが潰れて表示されるとき

SFSymbolsがこのように潰れて表示されてしまうときはどうするのか(UIKit)、メモしておきます。

![スクリーンショット 2021-11-19 12.28.45.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/505421/cbe7840a-04d2-ad0e-ebcf-6cd6f27c1f8c.png)

“`swift
private func createImage(parentView: UIView, imageName: String) {
let imageView = UIImageView()
imageView.image = UIImage(systemName: imageName)
imageView.frame = CGRect(x: 10, y: 12, width: 40, height: 40)
parentView.addSubview(imageView)
}
“`

## 対処法

設定

元記事を表示

【Swift】UIImagePickerControllerで簡単カメラ連携

# やりたいこと
カメラで写真を撮影して、その写真をアプリ内で使いたい。

# 環境
– Xcode 13.1
– Swift 5

# 準備
カメラを使う際は、info.plist の Camera Usage Description を定義しておく必要があります。
![スクリーンショット 2021-11-18 18.53.36.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/367596/35a9133d-388d-875d-9a22-acdd472ad7df.png)

# 処理概要
1. カメラのアクセス権限確認
1. UIImagePickerController のインスタンス生成、カメラ起動
1. Delegateで撮影した写真を受け取る

# ソースコード

“`swift:SampleViewController.swift
class SampleViewController: UIViewController {
/// ボタンタップでカメラを起動する
@IBAct

元記事を表示

2点のCGPointからCGRectを作る

任意の2点で構成される四角形を作る場合、よく`(p1.x – p0.x, p1.y – p0.y)`をsizeとしてCGRectを生成することがあるが、CGRectのunionを利用することで計算を手書きせずに簡単に作ることができる。

“`swift
let r0 = CGRect(origin: p0, size: .zero)
let r1 = CGRect(origin: p1, size: .zero)
let rect = r0.union(r1).standardized
“`

unionは2つのCGRectを構成する最小のCGRectを生成する関数で、これを利用して座標だけを持つCGRect2つをunionさせて四角形を計算させる。

元記事を表示

iOSのショートカットとGASを使って紙のお知らせの保存&リマインダー機能を作った#iOSショートカット#紙との決別

##まずはこれを見てほしい
![cSVGr4qw.jpeg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2143015/df09c3e9-7c50-7494-058d-2d6396f56387.jpeg)
我が子の保育園から貰うお知らせです。
ふむふむ、11/22までにボーダー柄の服とビニール袋をお持ちせよ。とな?
良し、期限まで時間もあるし、とりあえず置いておこう **←絶対忘れるやつ**

というわけで、LINEやメールが主流になった昨今ですが、まだまだ紙でのお知らせはたくさん来ると思います。紙なので埋もれやすいし**それ自体が邪魔になると思う**人も多いのではないでしょうか。私のことです。
携帯に記録しておくにも入力が面倒ですし、案外大事な情報が載っていたりするので紙のまま置いておいた方がよかったりします。

**こんな面倒ごとを、iOSのショートカット、Dropbox、Google Apps Script、LINE Notifyを駆使して解消してみました。**

##人間がやることと機械が裏でやるこ

元記事を表示

【Swift】Xcodeでカスタムフォントをコードで実装する方法

Xcodeでカスタムフォントを使用する方法。

## フォントファイルの用意

まずはフォントファイルを手元に用意します。

拡張子は`otf` `ttf` `ttc`のいずれかにしておきましょう。

## フォントファイルをアップロード

次に用意したフォントファイルをXcodeにドラッグアンドドロップでアップロードします。

![スクリーンショット 2021-11-18 23.17.00.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/522445/83d5f7a5-56ea-6319-58e8-1ed6e37246ee.png)

上の画像のようにウィンドウが表示されるので、画像のようにチェックを入れてFinishをクリックしましょう。

## Swiftコードで実装

アップロードが完了したらSwiftのコードで実装していきます。

“`swift
private let sampleLabel: UILabel = {
let label = UILabel()
label.f

元記事を表示

【iOS】FastlaneでUnitTest/UITestをいい感じに自動化してみた

## はじめに
Fastlaneをプロジェクトに導入をする機会があって、いろいろ調べたので記事にしてみました。
Fastlaneをこれから使ってみたい、XCTestを自動化したいという方の参考になれば幸いです。

## この記事で学べること
– Fastalenの導入の方法
– XCTest(UnitTest/UITest)を自動化する方法(前提としてプロジェクトにXCTestが導入されている必要がある)
– Test自動化のための細かいオプション

## Fastalen導入
Test自動化の前にFastlaneをプロジェクトに導入する必要があります。
プロジェクトのディレクトリに移動して、

“`
bundle init
“`

を実行すると、同ディレクトリに`Gemfile`が生成されます。

`Gemfile`をテキストエディタなどで開いて、コメントアウトされている`# gem “rails”`の下に、

“`
gem ‘fastlane’
“`

を書き足します。
ここまでは、エラーが起きて失敗したりすることはあまり無いと思います(自分は大丈夫でした)

次はインスト

元記事を表示

React NativeのiOSビルドが突然できなくなった

## 現象

ついこの間までビルドやシミュレータでのデバッグができていたのに、週明けたらできなくなってた

シミュレータは立ち上がるが、コンソールには`BUILD FAILED`が(控えめに)出て、シミュレータ上でアプリが更新されない

TestFlightに上げるための、XCode上でのビルドも失敗する

## 環境

* MacBookAir 11.4
* react-native v0.63.2

## エラー内容

“`
error Failed to build iOS project. We ran “xcodebuild” command but it exited with error code 65. To debug build logs further, consider building your app with Xcode.app, by opening [プロジェクト名].xcworkspace. Run CLI with –verbose flag for more details.

/[プロジェクトパス]/ios/Pods/Pods.x

元記事を表示

CollectionViewをつくってみる

## 環境
Xcode 13.1
Swift 5.5.1

## CollectionViewをつくる

#### View Controller > View の上に、Collection Viewを配置
`Section Header`をSB上で表示するには `Attributes Inspector` > `Accessories` > `Section Header` にチェックしました
背景色の設定はStoryboard上で行いました
![スクリーンショット 2021-11-13 23.28.51.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/505421/3f49df5e-c035-a262-603c-a6f1b208dd94.png)

#### HeaderやCellのidentifierを設定
UITableViewCellが再利用されないケースを検証

たまたま作業中に疑問に思うことがあってStackoverflowをググっていると、このような質問を見かけました。

[Does a UITextField with first responder status in a UITableViewCell prevent cell re-use?](https://stackoverflow.com/questions/8045099/does-a-uitextfield-with-first-responder-status-in-a-uitableviewcell-prevent-cell)

この記事では、「UITableViewCellに載っているUITextFieldがfirstResponderの場合、UITableViewセルの再利用がされないのでは?」という質問が投げかけられており、解答としては「SDKのドキュメントで言及はないので、その挙動に頼るべきではないでしょう。」となっています。

この記事では実際にこの挙動を検証してみます。

# 検証目的
`isFirstResponder`なviewをサブビューに持つ`UIT

元記事を表示

【Laravel】App Store Connect API からiOSアプリの売上レポートを取得する

# はじめに

自分で作ったiOSアプリのダウンロード数などが知りたい場合、以下の2つの方法で確認することができます。

1. App Store Connectにアクセスし、ブラウザ上で可視化された情報を確認する
1. App Store Connect API を叩き、データとして取得する

本記事では、iOSアプリの新規ダウンロード数を算出することを想定し、2番のApp Store Connect API経由でSales and Trendsレポートを取得する方法を紹介します。

# 準備

※ Laravelのプロジェクトが立ち上げ済みであることを前提に話を進めます

## JWT生成ライブラリのインストール
App Store Connect API の認証には、__JWT__(Json Web Token)が必要となります。
今回はLaravelでの実装のため、PHPでJWTを生成できるライブラリである`PHP-JWT`を使用します。(https://github.com/firebase/php-jwt)

上記リンクのREADMEにもあるように、composerでインス

元記事を表示

OTHERカテゴリの最新記事