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

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

iOSにおけるマルチスレッドを実装で確認してみる

iOSにおけるマルチスレッドの概念について、
理解を深めるために実際に動きで確認できるよう実装してみました。

#### マルチスレッドについて

– マルチスレッドとは並行処理のことである
– スレッドには、メインスレッドとバックグラウンドスレッドの二種類がある
– メインスレッドはUI更新時に、バックグラウンドスレッドは通信などUI以外の処理に使用される

iOSでは、主に***GCD(Grand Central Dispatch)***を用いて、タスクをクロージャで渡す。

##### なぜマルチスレッドが必要か?
– 通信処理時には待ち時間が発生する
– この処理をメインスレッドで行うと、画面描画やユーザーからのアクションにも待ちが生じる
– iPhone自体の処理能力は非常に高いので、CPUを有効活用する必要がある

##### GCD を用いた並行処理
– メインスレッド

“`swift

DispatchQueue.main.async {
// UI更新処理
}
“`
– バックグランド

“`swift
DispatchQueue.global.async

元記事を表示

[Swift]剰余演算子を使って配列を操作してみた

## はじめに
今回やりたいことは、`剰余演算子を使って配列を操作したい!`です。

## 環境
・ Swift:5.3.2

## 基礎のおさらい
・配列は格納された要素を`配列[数字]`で取り出すことができます。

“`Array.swift
let array = [“a”, “b”, “c”]
array[0] // “a”
array[1] // “b”
array[2] // “c”
“`

・剰余演算子は除算演算子とは違い、余りを求める演算子です。

“`Modulo.swift
0 % 4 // 0
1 % 4 // 1
2 % 4 // 2
3 % 4 // 3
4 % 4 // 0
“`
ここでお気づきの方もいるかもしれませんが、
実際に配列操作を剰余演算子で表現してみましょう!

## 実践

“`Playground.swift
let array = [“a”,”b”,”c”,”d”]
let indexPathRow = 1
let indexArray = array[indexPathRow % 4]
/*
ここでは[1 % 4]の計算式にな

元記事を表示

ユニバーサルリンク チェックポイント

### サーバ側

– `apple-app-site-association`ファイル
– ファイルの書き方が正しいか
– ファイルに`.json`など拡張子は何もつけない。
– `apps: []`というキー・バリューについて、iOS13以降であれば消していい。iOS12以前もサポートするのであれば、残す必要がある。
– `appID`キーについて、iOS13以降は`appIDs`キーに変えることもできる。iOS12以前をサポートするならそのままにする。
– `paths`キーについて、iOS13以降は`components`キーに変えることもできる。iOS12以前をサポートするならそのままにする。

[Supporting Universal Links in Your App](https://developer.apple.com/documentation/xcode/allowing_apps_and_websites_to_link_to_your_content/supporting_universal_li

元記事を表示

クロージャを用いたAPI通信後の処理

[iOSアプリ開発デザインパターン入門](https://www.amazon.co.jp/iOS%E3%82%A2%E3%83%97%E3%83%AA%E9%96%8B%E7%99%BA%E3%83%87%E3%82%B6%E3%82%A4%E3%83%B3%E3%83%91%E3%82%BF%E3%83%BC%E3%83%B3%E5%85%A5%E9%96%80-%E6%8A%80%E8%A1%93%E6%9B%B8%E5%85%B8%E3%82%B7%E3%83%AA%E3%83%BC%E3%82%BA%EF%BC%88NextPublishing%EF%BC%89-%E5%8D%83%E8%91%89-%E5%A4%A7%E5%BF%97-ebook/dp/B07DKT9YZX)という書籍の中で、クロージャを用いたエラー処理についての記述がありました。

再利用性が高そうだったので、忘備録としてまとめてみます。

#### クロージャを用いたエラー処理
クロージャは、ある処理の完了後に何かをしたい時に使われます。

例として、API通信後に成功だった時、もしくは失敗だった時に何

元記事を表示

画面遷移に関係あるコードの記述を別ファイルに分けて実装する

#はじめに
今までの私は、`Main.storyboard`でViewController同士を画面遷移させてました。

ですが、今時は`1つのStoryboardに1つのViewController`が基本で
`Storyboard Reference`を使用して画面遷移します。

というか、そもそも`Storyboardを使用せずにコードで画面遷移`といった流れになってきています。
※私はまだまだStoryboardを使用していますが!

なので今回はStoryboardを使わず、コードのみで画面遷移を実装しようといった感じです。

じゃあ早速、実装していこう!といってViewControllerに画面遷移のコードを
直接書くとまた新たな問題が浮上してしまいます↓
[節子、それViewControllerやない…、FatViewControllerや…。](https://niwatako.hatenablog.jp/entry/2017/09/15/192705)

では、一体どうすればいいのかというとタイトルにも書いてあるように
`画面遷移に関係あるコードの記述を別ファ

元記事を表示

元動物飼育員(完全未経験者)がiOSアプリをリリースした話

# 概要
元動物飼育員(完全未経験者)がSwiftでiOSアプリをAppleストアに公開することができたので、
リリースまでの道のりをご紹介していきます。

# アプリ紹介
まずは、アプリをご紹介します。
![1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/770482/0addadc9-1b72-8b50-f5a7-73872185020a.png)

元動物飼育員の知見を活かして、好きな動物やイベントのカードをスワイプして、
その結果に基づいた動物園にマッチングするというアプリです。
https://apps.apple.com/jp/app/zoogo/id1552154924

是非、興味がある方は使ってみてください?‍♂️

# スキル
私は、Swiftでのアプリ開発はもちろん、コードなんて無縁の世界で生きてきました。
スキルがあるとすれば、**チンパンジーの健康管理**ができることくらいでしょうか…

# アプリ開発の目的
私は、iosエンジニアへの転職を目指しています。
転職成功

元記事を表示

iOS IDFA対応アプリ申請時に必要なApp Privacy

iOS 14.5以降からIDFA(Identifier for Advertising)取得許可ダイアログを表示してユーザーから許可をもらわない限り正しいIDFAが取得できなくなりました。

この機能の実装が完了し、アプリをレビュー用に提出するボタンを押した際に次の警告が出ました。

![Screen Shot 2021-02-12 at 16.30.01.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/8920/59a7bdbb-e6b6-9b46-f80f-1c69950b1f83.png)

> Your app contains NSUserTrackingUsageDescription, indicating that you will request permission to track users. To update this information on your app’s product page, you must indicate which data types are

元記事を表示

iOSでGoogle Mobile Ads SDKを8にするとMediation Test Suiteのビルドが通らなくなるのでダメだ

タイトルの通りで、Google Mobile Ads SDKのバージョンを8.0.0にするとMediation Test Suiteのビルドができなくなる。バージョンを下げるしか回避策はない。ダメだ。

元記事を表示

更新の自動確認機能付きiOSショートカットをgithub-pagesを使って作る

# はじめに
_Qiitaへの投稿は初めてであるため、拙い記事ではありますがご了承ください。
また、投稿者は素人の学生であるため知識が浅く、この記事のコードには改善できる点や不正確な点があるかもしれません。_

iOSのショートカット機能は痒いところに手が届きません。
公にソフトを提供する場合、そのソフトに欠陥が見られたときにアップデートを提供するのは当然のことです。
しかし、iOSのショートカットは更新を加えて共有するたびにURLが変わってしまいます。ましてや、ショートカットの自動アップデートなんて機能は一切ありません。
ショートカット自体そこまで普及してもいないので情報も乏しく、自動アップデートの方法も一切インターネット上に載っていません。

ショートカットを公に提供するという方はあまり居ないとは思いますが、iOSアプリを公開するよりも遥かに楽に、コストもかからず、誰でも公開できるというのはiOSにおいてショートカットの持つ大きな利点です。

今回は、そんな一般向けに配布するショートカットを、より実用的にするプログラムを紹介します

元記事を表示

[Flutter]Instagramのstoryの移動UIのトレース

#はじめに
初投稿となります。お手柔らかにお願いします。

今回は、タイトルの通り、インスタでストーリーを移動するときの、四角い箱を回すようなUIをFlutterで作成していきたいと思います。
この記事が皆さんのお役に立てると嬉しいです。

#パッケージ
今回の自分が使用したパッケージは以下の通りです。

“`yaml:pubspec.yaml

dependencies:
flutter_hooks: ^0.15.0
hooks_riverpod: ^0.12.1
flutter:
sdk: flutter
“`

状態管理用に[riverpod](https://pub.dev/packages/riverpod)を入れています。
また、コードを簡単に書くために[flutter_hooks](https://pub.dev/packages/flutter_hooks)も入れています。

ただ、hooksを使ったことがない人でも、ドキュメントを読めばStatefulWidgetに置き換えることができると思います。

# 完成図

今回の完成図はこちらです。

元記事を表示

【バグ】iOS 14.2以降のiPadでUITextFieldをフォーカスするとLayoutConstraintsの警告が出る

# 概要

iOS14.2以降のiPadでUITextFieldをフォーカスすると、以下の警告がログ出力されます。iOS 14.1以前のiPadでは発生しないのでおそらくOSのバグでしょう。

“`
2021-02-11 16:22:34.675060+0900 UITextField Test[4986:357247] [LayoutConstraints] Unable to simultaneously satisfy constraints.
Probably at least one of the constraints in the following list is one you don’t want.
Try this:
(1) look at each constraint and try to figure out which you don’t expect;
(2) find the code that added the unwanted constraint or constraints and fix it.
(Note: If

元記事を表示

XCFrameworksに対応したCarthageを使ってみた

[Carthage 0.37.0](https://github.com/Carthage/Carthage/releases/tag/0.37.0)がリリースされ、XCFrameworksに対応しました?
これによりXcode12になってからCarthageで発生していた問題が解消されることになります。ワークアラウンドスクリプトが不要になり、さらにはM1 MacでCarthageが使えるようになります。
なぜCarthageがXCFrameworksを必要としていたかの背景や、XCFrameworksを生成する手順について解説したいと思います。

CarthageでXCFrameworksを生成する手順だけ知りたい方は、 [CarthageでXCFrameworksをビルドする](#carthageでxcframeworksをビルドする) へどうぞ。

## XCFrameworksって何?

まずXCFrameworksについて説明します。
XCFrameworks自体はXcode11から使用可能になっている技術です。
実際にCarthage0.37.0でビルドしたXCFramew

元記事を表示

[Swift] 重ね合わせの色を生成する(アルファブレンドする)

Swiftで、**アルファ付きの色同士を重ねたときの色を取得する(アルファブレンドする)**処理の実装方法。

## 実装

“`swift:UIColor+overlayColor.swift
extension UIColor {
/// 色を重ね合わせたときの色を生成する
/// 参考 https://ja.wikipedia.org/wiki/アルファブレンド
func overlayColor(_ otherColor: UIColor) -> UIColor {
/// 背景
var (dstR, dstG, dstB, dstA) = (CGFloat(0), CGFloat(0), CGFloat(0), CGFloat(0))
///

元記事を表示

【Flutter】iOS/Android/WebでFirebase Firestoreを使えるようにする。

# はじめに
昨年後半よりFlutter入門して社内用アプリを作っています。
今回はFirebaseのFirestoreを使えるようにします。

# 更新履歴
2021.2.11 初回投稿

# 環境
– macOS Big Sur(11.2)
– Flutter (Channel beta, 1.26.0-17.2.pre, on macOS 11.2 20D64 darwin-x64,
locale ja-JP)
– Android toolchain – develop for Android devices (Android SDK version 30.0.3)
– Xcode – develop for iOS and macOS
– Chrome – develop for the web
– Android Studio (version 4.1)
– VS Code (version 1.53.1)

# 参考にしたサイト

– [Cloud Firestore を使ってみる | Firebase](https://firebase.googl

元記事を表示

【Swift】Firestore × Codable 〜取得データを簡単にデコード〜

最近、iOSアプリ開発で`Cloud Firestore`を使っているのですが、何も気にせず使っていたら1つ気になることが、、、
**Firestoreから取得したデータのデコードがめんどくさい**
WebAPIからJSONで取ってきたデータは、Codableで簡単にデコードできるので、Firestoreから取ってきたデータも簡単にデコードしたい!と思い調べてみたので、記事にしました。
Codableについては、こちらの記事が大変参考になるかと思います。
https://qiita.com/UJIPOID/items/2c436a80f1167f7bcac0

## リファクタリング前のコード

`Firestore` × `Codable`を導入する前のコードをこちらに貼っておきます。

“`swift
import FirebaseFirestore

// MARK: – Menu
struct Menu: Codable {
let id: String
let category: String
let imageName: String
le

元記事を表示

iOSのウィジェットを対応する上で知っておきたかった点

業務で自分がウィジェット対応した際に必要だった知見が何個かあったのでまとめておく:iphone:
これからウィジェット対応する人の手助けになれば:muscle:

## サイズ指定
[supportedfamilies](https://developer.apple.com/documentation/widgetkit/staticconfiguration/supportedfamilies(_:))で指定

“`swift
struct SampleWidget: Widget {
var body: some WidgetConfiguration {
StaticConfiguration(kind: “sample”, provider: SampleWidget.Provider()) { entry in
SampleWidgetEntryView(entry: entry)
}
.supportedFamilies([.systemSmall, .systemMedium])

元記事を表示

SwiftUIでもprintデバッグしたい!!

**バッドノウハウです**。

通常SwiftUIでは`body`の中に`print`を書くことができません。

“`Swift
var body: some View {
let width: CGFloat = 100 + 100
print(width) //エラー
Rectangle()
.frame(width: width)
}
“`
この原因は`print(width)`が実は`Void`の値`()`を返していることです。そのため、`ViewBuilder`の側が`Void`の値を`View`として解釈しようとして、エラーになります。

パッと思いつく解決策としては下のように、`body`の外で計算型プロパティを作って内部で`print`を呼ぶ方法でしょうか。もちろんクロージャを即時実行する形でもいいと思います。

“`Swift
var width: CGFloat {
let _width: CGFloat = 100 + 100
print(_width)
retur

元記事を表示

npx react-native run-ios できない for 0.63~

#経緯
react-nativeを久々に触ったらなんかios動かなくなった。
いろいろアップデートした。二日かかった。いろいろ試した。
結果これに落ち着いたので共有します。

#対応案①
プロジェクト作り直し

“`
npx react-native init MyApp –version 0.62
“`

#対応案② こちらがおすすめ
以下に書いてありました。
https://github.com/facebook/react-native/issues/30836

PodFileを書き換える方法です。

“`
#use_flipper!
use_flipper!({ ‘Flipper-Folly’ => ‘2.3.0’ })
“`

podfileを書き換える方法らしい。
最近導入されたflipperさんがやらかしているとかなんとか

くそはまって公式のドキュメント通りできなくて、、、
よかった。また明日からがんばれます・・・

元記事を表示

[iOS] ipaファイル内のFrameworkを閲覧する

# はじめに
iOS14対応のIDFAに関して、`AppTrackingTransparency.framework`を内包した場合、トラッキングの許可を求めるダイアログは必ず出さなければならないようです。よって、このFrameworkを取り除くことにしましたが、Xocdeの`Build Phase`->`Link Binary With Libraries`にも`AppTrackingTransparency.framework`はありませんでした。
では、ipa内包の中身もみてみようということで見方は下記にまとめました。

## otoolを使用
`otool`コマンドは、実行ファイルやライブラリのオブジェクトファイルを分析し、結果を表示するコマンドです。

“`
otool option FileName
“`
|option |detail |
|——–|——–|
|-L |指定したファイルが使用する共有ライブラリを表示する |
|-M |ダイナミックリンクライブラリのモジュールを表示する |
|-f |ユニバーサル

元記事を表示

2021/1 Google Play | AppStore 対応期日カレンダー

![eyecatch_2101StoreCalendar-1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/218415/2380f173-a80f-ac3c-e52c-fef2a22c9ffa.png)

※ 本稿は [Tech Inside Drecom](https://tech.drecom.co.jp/?_src=qiita) に掲載された記事、「[2021/1 Google Play | AppStore 対応期日カレンダー](https://tech.drecom.co.jp/googleplay-appstore-calendar-202101/?_src=qiita)」の Qiita 出張版です。

こんにちは、SRE部クライアントグループの Smith です。
SRE というとサーバ・インフラのイメージがありますが、なぜクライアント?っていう部分は別の機会にお話したいと思います。

本稿では SRE部として収集し、社内共有している`対応期日のある Google Play

元記事を表示

OTHERカテゴリの最新記事