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

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

【macOS】Flutterの環境構築【iOS / Android対応】【4つの手順】

# はじめに
「Flutter SDKのインストール」から「iOSとAndroidでFlutterアプリを実行」までを、以下の手順で解説します。

1. Flutter SDKのインストール
1. シンプルなFlutterアプリの作成
1. iOSでFlutterアプリを実行
1. AndroidでFlutterアプリを実行

# 環境
OSはmacOSを利用します。macOS以外ではiOSの環境構築ができないためです。

FlutterのインストールとアップデートにGitが利用されているため、事前にXCodeをインストールしておくことをお勧めします。
[Webダウンロード](https://developer.apple.com/xcode/) / [Mac App Store](https://apps.apple.com/us/app/xcode/id497799835)

Homebrewを利用するため、事前にHomebrewをインストールしておくことをお勧めします。
[インストール方法](https://qiita.com/zaburo/items/29fe23c1ceb60

元記事を表示

【Swift・iOS】初学者必見!!コードレビューからコーディングする際の注意点をまとめてみた。

こんにちは、@shogunzozoです。これまでは技術によった記事を書いてきました。

たまには違う系統の記事を書きたいなと思い何を書くか考えていました。

ふと、自分の成長のためにレビュー頂いた事を書き溜めたメモ㊙️を思い出しました。

恥ずかしい指摘も受けましたが、皆さんにも良いコードを書いて頂きたいと思ってシェアしようと思いました!!

今後も振り返りできるメモ的な感じで随時更新していこうと考えています。もし、興味ございましたら覗きにきて下さい。

お役に立てれば幸いです、是非最後まで読んで頂ければと思います!!

※前後の関係性などは薄くなったり似ている事項があるかもしれません。そちらはご了承下さい。

## Scopeの絞り方を考える
必要な事は必要な所で宣言して、公開範囲を考える事です。

以下は極端な例ですが、ExampleTableViewCellのみで使用するExampleStateは以下の状態ですとグローバルに公開されています。
これは設計的な観点からも好ましくないです。

“`
class ExampleTableViewCell: UITableViewCe

元記事を表示

[iOS] ライブラリについてCocoaPods, Carthage, SwiftPMの対応状況を調査してみた

参考記事:
[iOSのパッケージ管理ツールはどれが良いのか?](https://zenn.dev/ynug/articles/ios-package-management-tool)

↑の記事に記載されているとおり、ライブラリ管理ツールとしては、

– CocoaPods
– Carthage
– Swift Package Manager (SwiftPM)

の選択肢があり、それぞれメリット・デメリットがあります。

ツール選定の判断基準としては、ライブラリの対応状況も関係してくると思います。
そこで、ライブラリの対応状況をざっくり調査してみました。

ライブラリの選定は、私が実務で使ったことがあるモノ + 今後使ってみたいモノです。
すなわち独断と偏見が入ってます。:sweat_smile:

# 調査結果(2022年3月27日時点)

| ライブラリ | Version | CocoaPods | Carthage | SwiftPM |
|:-:|:-:|:-:|:-:|:-:|
| [Alamofire](https://github.com/Alamofire/Alam

元記事を表示

WidgetKitで初心者の躓きどころ

# WidgetKitで初心者の躓きどころ
WidgetKitをみたら、いくつか躓きどころが合ったのでまとめてみました。

特にWidgetはメインのTargeと別なので
Targetが違うと色々参照できるようにする必要があります。

## 1. メインのターゲットを参照できない
参照したいファイルのTargetMembershipにチェックを入れればOK
※一つのファイルにいろんな依存物があると、それら全てをtチェックしないといけないので、各オブジェクト毎にファイルを分けるべし。

## 2. メインのTargetとは別でWidgetのTargetを作成するのでLibraryが参照できない。
Testなどと同様LibraryのTargetも追加する必要がある。

### Cocoa Podsの場合
podファイルのWidgetのTarget内に“`inherit! :search_paths“`を指定OK
“`xml
target ‘SampleWidgetExtension’ do
inherit! :search_paths
end
“`

### S

元記事を表示

digisparkを使ってiOSのアクセシビリティのスイッチコントロール用の外部スイッチボックス作成

iPhone、iPadなどのiOSにはアクセシビリティという設定があって、その中のスイッチコントロールという機能を使うとスイッチで[iOS機器を操作](https://support.apple.com/ja-jp/HT201370)できるようになっています。

これの外部スイッチ用のスイッチボックスの作成メモです。

## iOSの外部スイッチ
とりあえずここではUSBで接続するもの

USBで接続する場合にはiPhoneやiPadに[Lightning – USBカメラアダプタ](https://www.apple.com/jp/shop/product/MD821AM/A/lightning-usb%E3%82%AB%E3%83%A1%E3%83%A9%E3%82%A2%E3%83%80%E3%83%97%E3%82%BF)(ipad proなどのようにUSB-Cのものに関しては[USB-C – USBアダプタ](https://www.apple.com/jp/shop/product/MJ1M2AM/A/usb-c-to-usb%E3%82%A2%E3%83%80%E3%8

元記事を表示

コードから学ぶStoryboardを用いたCocoa MVCアーキテクチャ

# 参考

[iOSアプリ設計パターン入門](https://peaks.cc/books/iOS_architecture)

# サンプルアプリ

[CocoaMVCSample](https://github.com/b150005/CocoaMVCSample/tree/main/CocoaMVCSample)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/673880/386a17b8-14f8-dbd2-6177-da6f503d250b.png)

# Cocoa MVC

**Cocoa MVC**は、Appleが推奨する`MVP(Passive View)アーキテクチャ`である。
数多く存在するアーキテクチャパターンは、**Presentation Domain Separation**の概念を根底としており、
**アプリケーションのUI(Presentation, View)** と **UIとは無関係な処理(Domain, Model)** を分離することを目

元記事を表示

OHHTTPStubsでリダイレクトがうまくいくかどうかの単体テストは書かないほうがいい

リダイレクト処理がうまくいくことを保証するためにOHTTPStubsを利用して単体テストを記述しました。
僕の場合はローカル環境ではうまく動くのですが、パイプラインのVM上でその単体テストを動かそうとするとまれに失敗することがありました。

下記のIssueがそれに対応するようです。

https://github.com/AliSoftware/OHHTTPStubs/issues/230

非常に残念ですが、リダイレクトについては単体テストで担保しないか、OHHTTPStubsを用いないで実装するしかなさそうです。

ただ先輩に教えていただいたとおり、基本的にはURLSessionがリダイレクトの機能を持っているため、単体テストで担保する必要はないとは思います。

もしiOSのリダイレクトの挙動についての品質保証をどうされているか知見がある方がいらっしゃれば教えていただきたいです。

元記事を表示

Provisioning profile “” doesn’t include signing certificate ‘内容’が発生

# Provisioning profile “” doesn’t include signing certificate ‘内容’が発生
`Flutter build ipa`の時に発生

# 解決策
.Cettificateの’内容’
・Provisioning file(AutoではなくManualの場合)の’内容’
・XcodeのTARGETSのRunner→Build Settings→Signingの’内容’

を全て一致させる。(僕の場合の’内容’は’Apple Distribution’でした!!)

元記事を表示

‘Flutter/Flutter.h’ file not found flutter/.pub-cache/hosted/pub.dartlang.org/url_lau ncher_ios-6.0.15/ios/Classes/FLTURLLauncherPlugin.h:4:8が発生

# ‘Flutter/Flutter.h’ file not found flutter/.pub-cache/hosted/pub.dartlang.org/url_lau ncher_ios-6.0.15/ios/Classes/FLTURLLauncherPlugin.h:4:8が発生
`Flutter build ipa`
でこのエラーが発生しました。
原因はPodfileにありました

## ダメな方のPodfileのpost_install
“`
post_install do |installer|
installer.pods_project.targets.each do |target|
target.build_configurations.each do |config|
config.build_settings[‘IPHONEOS_DEPLOYMENT_TARGET’] = ‘11.0’
end
end
end
“`

## いい方のPodfileのpost_install
“`
post_install do |i

元記事を表示

Flutter build ipaで Module ” not foundが出る

# Flutter build ipaで Module ” not foundが出る
“`Podfile.js
# Uncomment this line to define a global platform for your project
platform :ios, ‘11.0’

# CocoaPods analytics sends network stats synchronously affecting flutter build latency.
ENV[‘COCOAPODS_DISABLE_STATS’] = ‘true’

project ‘Runner’, {
‘Debug’ => :debug,
‘Profile’ => :release,
‘Release’ => :release,
}

def flutter_root
generated_xcode_build_settings_path = File.expand_path(File.join(‘..’, ‘Flutter’, ‘Generated.xcconfig’), __FI

元記事を表示

SwiftUIでライトモードとダークモードで画像を切り替える Light / Dark mode

“`swift
@Environment(\ .colorScheme)var colorScheme
var body: some View {
Image(colorScheme == .light ? “lightImage”:”darkImage”)
}
“`

?
****
フリーランスエンジニアです。
お仕事のご相談こちらまで
rockyshikoku@gmail.com

Core MLやARKitを使ったアプリを作っています。
機械学習/AR関連の情報を発信しています。

元記事を表示

FlutterのCupertinoTabBarの高さやTextStyleを自由に変更したい

# はじめに

アプリの画面切り替えに使うTabBarの選択肢として、CupertinoTabBarは便利ですが、
CupertinoTabBarにもう少し設定を加えたい!って思っても、
引数に自分が調整したいプロパティがなくて、困った!ってことはないでしょうか。
そんなときの解決策の案の一つとして、今回の記事を紹介したいと思います。

# 通常のCupertinoTabBarを使用した場合

“`dart:main.dart
import ‘package:flutter/cupertino.dart’;
import ‘package:flutter/material.dart’;

void main() {
runApp(MyApp());
}

class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
home: MyHomePage(),
);
}
}

class MyHome

元記事を表示

【Swift】カスタムインプットビュー対応のキーボードで隠されない文字入力欄を作る

iOSには普段利用するシステムキーボードがあります。
これとは別にサービスによってスタンプや絵文字など独自の入力を行いたい場合があります。

そのような場合に独自入力は別UIViewで表示/非表示を制御する方法もありますが、
`UITextField` ではカスタムインプットビューを使うことでキーボードの一部として扱うことが出来ます。

この記事では以下のような表示の作り方や入力しやすい工夫について記載します。

# キーボードで隠れないようにする
`UITextField`を追加しただけではキーボードを表示した際に隠れてしまいます。

初めてiOSアプリをリリースした話

## はじめに
こんにちは!初めましてsoraと申します!  
カレンダーアプリをリリースしたのでこちらにて紹介させてください!
ちなみに私は現在、22年卒の大学生でSwift歴は2020年9月~です。

## リリースしたアプリの紹介
今回リリースしたアプリは「Re:スケ」というカレンダーアプリです。このアプリは大学のゼミの卒業制作として3人でチームを組み作ったアプリです。
カレンダーアプリを作った理由は、みんなが使えるアプリを作りたいってなったのと今までカレンダーを扱ったアプリを作ったことがなかったので勉強したいからという割とざっくりとした理由でカレンダーアプリを作ることにしました。
AppStore: https://apps.apple.com/jp/app/re-%E3%82%B9%E3%82%B1/id1607735456
[ソースコード](https://github.com/sora5042/CalendarApp)はこちらです。
よろしければインストールして試してみて欲しいです!

## アプリ概要

元記事を表示

IoT用MEEQのSIMをiPhoneに刺してみた

「霊園ガイド」サイト開発日記の高橋です。<誰も知らんがな

さて、最近は、IoTのSIMもいろいろ提供されているけど、「ソニーネットワークコミュニケーションズ スマートプラットフォーム株式会社」という長い名前の会社から提供されてる月130円のSIMを発行してもらってiPhoneに刺してみたので、その手順をメモしておきます。

スクショをそのまま貼っていったので画像がでかくて見にくいかな。Qiitaのマークダウンに画像サイズを指定できないのだったけ?まぁ、引越しで忙しいから許してね。

MEEQとは
https://www.sonynetworksmartplatform.co.jp/meeq/about.html

SIMの発行はWebコンソールでまぁはじめてだと戸惑いながらも割と簡単にできるのだけど、今日は申し込んでSIMが届いて、アクティベーションまでは終わり、IPhonに「構成プロファイル」をダウンロードするところから書いていきます。

ちなみに届いたMEEQのSIMはこんな感じでマルチカットなタイプで、nanoSIM microSIM 標準SIMがどれでも使えます。

![I

元記事を表示

Pod install がエラーになる

>You may have encountered a bug in the Ruby interpreter or extension libraries.

Cocoa Podsをインストールした後、Pod installで上記のエラーが出たときは、ターミナルを一回閉じてみよう。

?
****
フリーランスエンジニアです。
お仕事のご相談こちらまで
rockyshikoku@gmail.com

Core MLやARKitを使ったアプリを作っています。
機械学習/AR関連の情報を発信しています。

[Twitter](https://twitter.com/JackdeS11)
[Medium](https://medium.com/@rockyshikoku)
[GitHub](https://github.com/john-rocky)

元記事を表示

Top 5 Trusted iOS App Development Companies in the USA

![app development cost.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/133693/2b61ee45-409a-62b2-759b-387a5d4d6aae.png)
Here is the list of the best iOS app development companies that provide the best solution in the USA
AppsChopper:

AppsChopper is a reputable iOS app development company with offices in New York and Massachusetts. App developers build interactive and high-performing native applications for iPhone, iPad, and other iOS related devices. Our team has successfull

【Swift】テキストフィールド数値のみの入力制限

#

iOSでよく扱う入力制限についての備忘録です

“`swift
@IBOutlet private weak var quantityTextField: UITextField!

override func viewDidLoad() {
super.viewDidLoad()

quantityTextField.delegate = self
}

//省略

extension ViewController: UITextFieldDelegate {

func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool {

guard let text = textField.text else {
return false
}

i

【Swift】Delegateメソッドでジェネリクスを使いたい時にassociatedtypeは使えない

## はじめに
今回は、Protocolにジェネリクスを引数に受け取るメソッドを定義したとき、
そのProtocolに書いたメソッドをDelegateメソッドとして、使いたい場合の書き方を記事にしました。

## 前提条件
Swiftにおける下記の3点について知っていること
– Protocol
– Delegate
– ジェネリクス

## このように書くとコンパイルエラーになる
#### ソースコード
“`swift
protocol SampleDelegate: AnyObject {
associatedtype T
func getSampleData(_ data: T)
}

class Fuga: SampleDelegate {
typealias T = String
func getSampleData(_ data: T) {
print(data)
}
}

class Hoge {
weak var delegate: SampleDelegate? // コンパイルエラー
}

Xcode 5でSpriteKitのSKTextureAtlasを使用する

SwiftUI ベースのプロジェクトで SpriteKit の SKTextureAtlas を使用したかったのですが、プロジェクトに “.atlas” サフィックスのフォルダを作成し、コンパイル時にアトラスを生成させる方法ではできなかったので、調査しました。

https://developer.apple.com/documentation/spritekit/sktextureatlas/about_texture_atlases

結論から述べますと、アセットカタログ (Assets.xcassets) に作成したフォルダをアトラスとして使用できます。

具体例を示します。次の通りにアセットカタログに “cat” フォルダを作成し、猫が歩くアニメーションのフレーム画像 (cat-walk.0 〜 3) を保存します。

“`text
Assets.xcassets
├─AccentColor
├─AppIcon
└─cat
├─cat_walk_0
├─cat_walk_1
└─cat_walk_2
“`

ソースコードで、`SKTextureAtlas` の