iOS関連のことを調べてみた2022年09月03日

iOS関連のことを調べてみた2022年09月03日

モバイルエンジニアが内定者としてインターンシップにフロントエンドで参加した話(ざっくりまとめ)

#### 本記事は、「モバイルエンジニアが内定者としてインターンシップにフロントエンドで参加した際の話」をざっくりまとめたものです。
もしかしたら、この話の各テーマごとに深掘りした記事を今後出すかもしれないです

# 自己紹介

自動車産業が有名な県で専門学生をしている20歳男性です。
高校の頃に独学でプログラミングを始め、専門学校に進学。
来年の4月にはビジネスチャットを提供している企業に、モバイルエンジニアとして新卒入社する予定です。

半年ほど前まではFlutterを書いていましたが、最近では入社に向けてSwiftを書いていています。

今回は、入社予定の企業のインターンシップに内定者として参加させていただいたので、その経験や感想をまとめていこうと思います。

# インターンの内容

インターンの期間:3週間
– #### 講義パート :1週間
– __環境構築__ から __デザイン__ , __React__ , __型システム__ , __要件定義__ , __ドメイン駆動設計__ , __運用__ , __アジャイル・スクラム__ …などなど様々な講義を受

元記事を表示

【AdMob】ネイティブ広告で画像広告だけ表示する

# はじめに
ネイティブ広告には画像広告と動画広告があります。
動画広告は重いのでスクロールがカクついたりします。
ですので、画像広告だけを表示したいと思い、
AdMobの実装関係のドキュメントを一生懸命読んでました。

なかなか見つからないのでないのか。。。と諦めかけた所、マイページで設定ができたので紹介します。

# 設定方法
1, ハンバーガーメニューを開きます。
2, 「広告ユニット」を選択します。
![スクリーンショット 2022-09-03 0.25.03.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1745371/89f6f1a1-5776-eef4-c0ef-f24d72047031.png)

3, 該当の広告ユニットを選択します。
![スクリーンショット 2022-09-03 0.26.38.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1745371/c7d57517-bd9c-df79-3be3

元記事を表示

アプリに撮影機能を持たせた時の注意点

# はじめに
アプリに撮影機能を実装した際に挙動がおかしな点が見つかったので備忘録として記事にしました。
# 問題
音量ボタンでシャッターを切る実装をした際に、撮影画面でホーム画面に戻る、または画面ロックすると再度撮影画面に復帰した際に音量ボタンで撮影できなくなってしまいました。
# 原因
https://developer.apple.com/documentation/avfaudio/avaudiosession/1616596-interruptionnotification

上記ドキュメントのNoteにこう書かれていました。
> Starting in iOS 10, the system deactivates an app’s audio session when it suspends the app process.

日本語に翻訳すると、
> iOS 10から、アプリのプロセスを中断する際に、アプリのオーディオセッションを非アクティブにするようになりました。

つまり、音量ボタンで撮影するためにアクティブにした[AudioSession](https://dev

元記事を表示

【SwiftUI】影を特定のViewだけに付与する

# はじめに
SwiftUIを使っていてこれどうやるんだ?と思った事があったので記事にします。

# 現在のコード
“`swift
struct ContentView: View {
var body: some View {
Text(“影のテストです”)
.frame(width: 200, height: 80)
.background(Color.yellow)
.shadow(color: .black, radius: 3, x: -5, y: -5)
}
}
“`

# 問題
背景の黄色だけに影を付けたいのにTextにも影が付く
![スクリーンショット 2022-09-02 22.19.23.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1745371/7a0fe59d-1bd2-15c4-66a2-c9b50df4eede.png)

# 解決方法
`shadow`の前に`com

元記事を表示

【SwiftUI】アプリ内でWebサイトを表示する方法

## はじめに
アプリ内でWebページを見せる

## 環境
Xcode 13.3.1

## Code

“`swift: MainView
struct MainView: View {
var body: some View {
NavigationView{
VStack(spacing: 30){
NavigationLink(destination:
WebView(urlToLoad: “https://www.google.com”)) {
Text(“Google”)
.foregroundColor(Color.white)
.padding()
.background(Color.blue)

元記事を表示

【SwiftUI】自動スクロール機能を持つCustom TabView

## はじめに
基本的なTabViewではTabViewの活用に限界がある。

TabItemをカスタマイズし、一回タップで最初のページに戻り、2回目でスクロールを一番上に戻す機能を加える。

## 環境
Xcode 13.3.1

## Code

“`swift: MainTabView
struct MainTabView: View {

@EnvironmentObject var value : ValuesModel

@State var showNextPage = false

init(){
UITabBar.appearance().isHidden = true
}

@State var countForScroll = 0
@State var currentTab = “house”

var body: some View {
VStack {
TabView(selection: $curr

元記事を表示

18ヶ月を振り返ってみたよ

遡ること2年半前、金融機関を退職し昼夜逆転の生活を繰り返しながら遊び呆けてました。
グランド・セフト・オートのオンラインで知らないユーザーに虐殺されて発狂していたのを思い出します。

そんな底辺生活を脱してiOSアプリの開発に携わらせてもらったのが約1年半前。
このような機会を与えてくれた弊社にはとても感謝しています。

今回は今までのアプリ開発を振り返って記事を書いてみようと思います。

## 私という人物について

大学までずっと文系でした。**どちらかというと今も文系かもしれません。**
高校までサッカーしかしておらず勉強は二の次でした。

大学では法学部で、主に商法を勉強してました。
その他にも経済刑法(いわゆるマルチ商法)や原価計算などといった経済学部的なことも勉強してきました。

新卒で信用金庫に就職し営業として働いてました。
札勘は得意です。いつでも数えられます:fist:

ここまで書いて、自分でもびっくりするくらいエンジニアとはかけ離れています。

## 文系の人間がエンジニアとして働くために意識してきたこと

勉強するときに特に意識していたのは、
**身近なもので

元記事を表示

SwiftUIでのiOS・iPadの画面遷移時の表示方法の違い

SwiftUIで画面遷移を実装した際に、
iPadとiPhoneで微妙に遷移時の表示が異なる場合があったので、まとめました。

■ 動作環境
iOS15.8
iPadPro mini(6th Generation)
※iPadPro(12.9inch)(5th Generation)も一部あり
iPhone13 mini

## タブ遷移
■ iPad
![Simulator Screen Recording – iPad mini (6th generation) – 2022-08-07 at 21.19.37.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/160605/d6728129-84ec-b7f0-f6f0-767e85c179c3.gif)

■ iOS
![Simulator Screen Recording – iPhone 13 mini – 2022-08-07 at 20.51.08.gif](https://qiita-image-store.s3.ap-northeas

元記事を表示

Swift/Objective-C コードに見出しをつけて可読性を上げよう

# 1.はじめに
プロジェクトや個人開発でコードを書く際、後でソースコードを見る人(未来の自分を含む)に向けてコメントを残すのはとても重要だと思います。
そのメソッドはどんなものなのか、何をしているのか、後で付け足すことや今後の懸念点がないか、考えるべきことは様々です。
そんなコメントの一環として、
“`
– delegate実装の先頭
– まとまった意味を持つメソッド郡の先頭
“`
に見出しをつけることによって、ソースコードが見やすくなると思います。

また、今回の環境については、下記の通りです。

__環境__
__Xcode Version 13.4.1__
__Swift version 5.6.1__

# 2. 実際の見出し
では、具体的な見出しの方法について見てみましょう。
## ●Swift
Swiftでの見出しの書き方は下記の通りです。

“`swift:SampleViewController.swift
// MARK: 見出し文
// MARK: – 見出し文
// MARK: 見出し文 -(-の後ろに空白を入れないこと)
// MARK: – 見出し

元記事を表示

【Swift】バックグラウンドスレッドからの変更はできないらしい

# はじめに
https://qiita.com/mesummery/items/9d096162a351e2e922c5

上記のリンクを参考にインターネット接続の監視を実装してる際にViewの切り替え時に紫色警告が発生したので対処法を載せておきます。

# 実装内容
“`swift
// ネットワーク監視
private func observeNetwork() {
monitor.pathUpdateHandler = { path in
if path.status == .satisfied {
self.isNetwork = true // オンライン
} else {
self.isNetwork = false // オフライン
}
}
monitor.start(queue: queue)
}
“`
“`swift
import SwiftUI

@main
struct TwitterSearchApp: App {
@Obser

元記事を表示

【SwiftUI】@Bindingの使い方

## はじめに
@Binding の使い方

異なるView間で値を共有する方法として`@Binding`を用いる

## 環境
SwiftUI
Xcode: 13.3.1

## Code

`@State`を用いて値を渡す場合
“`swift: HomeView
struct HomeView: View {

@State var showNextPage = false
@State var button = false

var body: some View {
NavigationView{
VStack{
Text(“Home page”)
Button {
self.button.toggle()
} label: {
Text(self.button.description)

元記事を表示

SwiftPM を用いたプロジェクトで出たエラー対処法

# エラー内容
SwiftPMを利用しているプロジェクトをcloneしてビルドした時に以下のエラーが出た。

“`
the package at ‘/’ cannot be accessed (Couldn’t read ‘v10.28.6’:
“`

# 対処法

`[AppName].xcworkspace/xcshareddata/swiftpm/Package.resolved` に存在するPackage.resolvedを削除する。

削除後、再度ビルドしたらうまくいった。

なお、Finderで上記ファイルにアクセスする場合、[AppName].xcworkspaceを右クリックし、「パッケージの内容を表示」をクリックすればアクセスできます。

# まとめ
その他、良い解決策があれば教えていただけるとありがたいです!

# 参考
* https://stackoverflow.com/questions/67185817/package-resolved-file-is-corrupted-or-malformed

元記事を表示

Diffable DataSource 入門

## 概要

iOS 13 から `UICollectionView` / `UITableView` に表示するデータを管理する方法として `UICollectionViewDiffableDataSource` / `UITableViewDiffableDataSource` が登場しました。 Diffable DataSource を使うことにより、以前までの方法と比べて宣言的に書くことや美しいアニメーションのサポートも受けることができますが、一見すると登場人物が多く複雑に見えます。この記事では、 Diffable DataSource を触ったことがない人でもざっくりとその使い方が理解できるように Diffable DataSource の基礎知識をまとめます。そのための例として Todo アプリを取り上げ、以下の順で作っていきます。その過程で一通り Diffable DataSource の使い方が理解できるようにします。

– Todo アプリの最小構成を作る
– Todo を削除できるようにする
– Todo を編集できるようにする
– セクションヘッダを追加する

元記事を表示

初学者のswift学習アウトプット

iOSアカデミアで学んだ学習内容を適時アップしていこうと思います。

学習内容

・「protocol」:複数のクラスで共有するメソッドを記述。protocol名を付けたclassには、protocolで記述したメソッドを記述しなければならない。

・「Delegate」:あるクラスの処理完了時に他のクラスの処理を実行させる。delegateを受け取る側のクラスには、以下のように定義しなければならない。

“`
「例」:変数名.delegate = self
“`
・「Extension」:クラスや型に拡張機能を持たせる構文。拡張機能とは、メソッドや変数を定義でき、一部のクラスや型に機能を持たせた場合に使用。swiftファイルを分割し見やすいコードになる(リファクタリング?)。

Xcode

・「navigator area」:画面左側のカラム。【command + 0】で表示非表示の切り替えができる。
・「storyboard」:アプリの画面を作成するためのファイル
・「editor area」:中央に表示さ

元記事を表示

【SwiftUI】fullScreenCoverがあるならhalfScreenCoverがあっても良くない?

# はじめに
iOS15から`UISheetPresentationController`が使用できるようになり、簡単にハーフモーダルを実装できるようになりました。
SwiftUIでも使えるように`halfScreenCover`として実装します。

# 完成形
`fullScreenCover`と全く同じように使えるようにします。
![スクリーンショット 2022-08-31 17.32.39.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1745371/09072711-85e5-4953-59e1-15ab90352f85.png)

![Simulator Screen Recording – iPhone 12 – 2022-08-31 at 18.11.50.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1745371/8824f61f-73f8-556f-3ed9-7c6a3609a35c.gif)

元記事を表示

非表示 App の配信 (Unlisted app distribution) を実際に利用してみた

## 非表示 App の配信 (Unlisted app distribution) ってなに?

2022 年 1 月頃に導入された AppStore での新しいアプリ配信方式。

https://developer.apple.com/jp/support/unlisted-app-distribution/

大まかな特徴としては、

– 通常のストア公開アプリと同じ
– AppStore 用のビルド
– AppStoreConnect 上のストアページのメタデータ類の整備が必要
– 公開前の審査あり
– インストール制限なし
– AppStore 上において通常の検索結果、その他リストには表示されない
– 別途用意される URL リンクを踏むことで、 AppStore 上でストアページの表示とアプリインストールが可能

といった点が挙げられます。

この「非表示 App の配信」を実際に設定する機会があったため、その際の知見をまとめてみました。

## Apple 側への申請対応
### 1. アプリを通常審査に提出

[Apple の公式サポー

元記事を表示

Firebase Crashlytics の upload-symbols コマンドを直接入手する

## 経緯

Bitcode が有効化されたアプリで、 dSYM ファイルを AppStoreConnect からダウンロード。
fastlane の `upload_symbols_to_crashlytics` アクションでこれをアップロードする CI / CD のステップを組んでいました。

https://docs.fastlane.tools/actions/upload_symbols_to_crashlytics/

Firebase Crashlytics には dSYM ファイルをアップロードするためのコマンドとして [upload-symbols が同梱](https://github.com/firebase/firebase-ios-sdk/blob/9.0.0/Crashlytics/upload-symbols) されており、`upload_symbols_to_crashlytics` アクションでは、この `upload-symbols` を利用して dSYM ファイルのアップロードを実施しています。

Firebase Crashlytics を Co

元記事を表示

iOS開発で作成された不要なキャッシュを削除しディスク容量を増やす

## 前提
前提条件として、以下の実行環境での動作を確認しています。

– Apple M1
– macOS Monterey バージョン 12.0.1
– Xcode Version 13.4.1

以前のバージョンや新しいバージョンでも動作するかは未検証です。

## シェルスクリプト
以下のスクリプトを実行すると不要なディレクトリ・ファイルが削除されます。
筆者の環境では数十GBのディスク容量を空けることができました。

“`sh
# DerivedData
# 中間生成ファイル。アプリ単位でビルド時に作成され
# ビルドが突然できなくなった場合などこれを消すと解消する場合がある。
# 削除すると次回のビルドが実質クリーンビルドになる。
rm -rf ~/Library/Developer/Xcode/DerivedData/*

# iOS DeviceSupport
# Xcode が iOS 実機端末との接続を認識したタイミングで作成される。
# iOS バージョンをアップデートする度に新しいディレクリが増えていく。
# 全削除して問題なし。
rm -rf ~/Libr

元記事を表示

[M1Mac]Carthageを用いてR.swiftを使う方法

# はじめに
Carthageでライブラリを入れて開発をしているのですが、R.swiftを初めて使う際に機能しなくて困っていました。
色々調べていく際に、M1Macの「Homebrewの場所がIntel製と異なる」という特徴が原因であると発覚したので、報告&改善策としてまとめます。

# 開発環境

– M1 macOS Monterey
– Swift5
– Xcode: 13.4.1
– R.swift: 6.1.0(13F100)

# R.swiftとは
Swiftプロジェクトで画像、フォント、ストーリーボードなどのリソースを簡単に取得できるようにするライブラリです。

https://github.com/mac-cain13/R.swift

これを導入するメリットは、

– リソースをキャストせずに使える
– コンパイル時のチェックにより、誤った文字列でアプリがクラッシュすることがなくなる
– リソース名が自動補完される

といった点があります。

具体的にSwiftコードで見てみると、

“`swift:R.swiftなし
let icon = UIImage(nam

元記事を表示

【SwiftUI】Viewを引数にとるViewの作成方法

# 方法
今回の例は背景色を黄色にするViewを作成しています。
“`swift
import SwiftUI

struct BackgroundView: View {
private let content: () -> T

init(@ViewBuilder content: @escaping () -> T) {
self.content = content
}
var body: some View {
ZStack(alignment: .center) {
Color.yellow.edgesIgnoringSafeArea(.all)
content()
}
}
}
“`

# 使い方
“`swift
struct ContentView: View {
var body: some View {
BackgroundView {
Text(“サンプル”)

元記事を表示

OTHERカテゴリの最新記事