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

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

Swift Playgrounds App

2021年から、iPadのSwift Playgroundsアプリを使ってiOSアプリの開発ができるようになりました。この際、従来のやり方であるXcodeを使ったiOSアプリの開発とは異なる、新しいプロジェクト形式が使われます。

この新しいプロジェクト形式は、従来の形式にあった問題点を解消していて興味深いです。本記事では、この新しいプロジェクト形式がどのようなものなのか見ていきます。

## Xcodeプロジェクト形式

まず、従来のプロジェクト形式について確認しましょう。ここでは、「Xcodeプロジェクト形式」と呼ぶことにします。

XcodeでiOS Appを新規作成すると、`.xcodeproj` という拡張子のバンドル(フォルダ)ができます。xcodeprojバンドルの中に `project.pbxproj` というファイルがあり、これにプロジェクトの情報が保存されます。

“`shellsession:Xcodeプロジェクト形式の構成ファイル(一部省略)
XcodeAppSample/
├── XcodeAppSample/
│   ├── ContentView.swi

元記事を表示

【Flutter】tutorial_coach_mark の使い方

## 初めに
tutorial_coach_mark とは、以下のように、特定の Widget にフォーカスして、ユーザにアプリの操作方法を理解してもらうためのチュートリアルを作成するパッケージです。

[公式ページ](https://pub.dev/packages/tutorial_coach_mark)から引用

## 記事の対象者
+ アプリにチュートリアルを実装したい方
+ 操作が難しいアプリを開発している方
+ アプリに対して「操作がわかりにくい」とフィードバックがあった方

## 準備

### パッケージの追加
まずは[ tutorial_coach_mark パッケージ ](https://pub.dev/packages/tutorial_coach_mark/install)を「 pubspeck.yam

元記事を表示

【Swift】コードでアラートを閉じる

# はじめに
たぶん普通の事なんだと思いますが、初心者すぎて悩んだので記録しておきます。

# 実装
ボタンでアラートを表示して、アプリがバックグラウンドになったらアラートを閉じます。
“`swift
import UIKit

class ViewController: UIViewController {

private var alert: UIAlertController!

override func viewDidLoad() {
super.viewDidLoad()

// バックグラウンド監視
NotificationCenter.default.addObserver(
self,
selector: #selector(background),
name: UIApplication.willEnterForegroundNotification,
object: nil
)

元記事を表示

【Xcode】正規表現を使用して一括置換

# はじめに
Xcodeの検索機能や置換機能はよく使うと思います。
置換を正規表現使ってやりたいと思ったときにやり方に迷ったので記録しておきます。

# やり方
① `⌘ + F`で検索欄を表示させます
![スクリーンショット 2022-09-09 1.07.59.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1745371/de242ca9-1280-1fd6-4067-223aeeac9d70.png)

② Findの右にある矢印を押します
![スクリーンショット 2022-09-09 1.09.35.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1745371/4a830658-a1fb-02c9-6c71-830392ca856c.png)

③ 「Replace」を選択します
![スクリーンショット 2022-09-09 1.10.47.png](https://qiita-image-store.s3.ap

元記事を表示

[Fllutter]iOSエミュレーターで実行できなくなった

# 実行できるようになります。
## 出たエラー
“`
Launching lib/main.dart on iPhone 13 Pro Max in debug mode…
Running pod install…
Running Xcode build…
Xcode build done. 8.2s
Failed to build iOS app
Error output from Xcode build:

2022-09-09 18:26:27.927 xcodebuild[69619:651609] Requested but did not find extension point with identifier Xcode.IDEKit.ExtensionSentinelHostApplications for extension Xcode.DebuggerFoundation.AppExtensionHosts.watchOS of plug-in com.a

元記事を表示

FlutterでiOSのselectionHandleColorを設定する方法

## 概要
iOSにおいて、テキスト選択時のハンドルカラーを`textSelectionTheme`で変更することができず、つまずいたので方法を紹介します。

スクリーンショット 2022-09-09 0.07.35.png

## Androidの場合
テキスト選択時の設定は全て`textSelectionTheme`で設定できます。
“`dart
ThemeData(
// …省略…
textSelectionTheme: TextSelectionThemeData(
selectionColor: selectionColor,
cursorColor: cursorColor,
selectionHandleColor: selectionHandleColor

元記事を表示

Swift Playgrounds のアプリに plist ファイルを適応して機能を追加する

# 初めに

まず最初に **Xcode の Playground とは違います** のでmm
今回は **Swift Playgrounds** でアプリを開発する場合のお話です。

## Swift Playgrounds とは

2016年に登場した iPad 上で Swift を学習できるアプリです。

https://www.apple.com/jp/swift/playgrounds/

当初はテンプレートの教材を Swift で学習するだけでした。

現在はバージョンが`4.1`までリリースされており、iPad のみならず Mac 上でも動作し、**実際にリリースできるアプリが作成できる**までになりました。

## どんなことができるの?

iOSDC Japan 2022 で LT をします!

https://fortee.jp/iosdc-japan-2022/proposal/cc685572-46e9-483a-83b2-a1c839662dec

登壇後に資料をあげるので、見ていただけると少しは理解が深まるかと思いますmm

# plist ファイルに

元記事を表示

App Groups で共有したファイルを監視してプロセス間の変更を Combine で検知する

## 背景

### App Groups とプロセス間通信

https://developer.apple.com/documentation/bundleresources/entitlements/com_apple_security_application-groups

> App groups allow multiple apps produced by a single development team to access shared containers and communicate using interprocess communication (IPC).

App Groups は複数のアプリケーションが同じ領域にアクセスできるようにする仕組みです。異なるアプリケーションは別のプロセスで動いて

元記事を表示

【Swift】文字列を比較する

# はじめに
文字列を比較する方法を学んだので記録しておきます。

# 使い方
“`swift
import Foundation
let A = “123”

let B = “456”

let compare = A.compare(B, options: .numeric)

switch compare {
case .orderedAscending:
print(“Aの方が小さいです”)
case .orderedDescending:
print(“Aの方が大きいです”)
case .orderedSame:
print(“AとBは同じです”)
}
“`

# 解説
数字と数字の比較ならわかりやすいですね
しかし、`compare`は数字以外も比較できます。

なぜ数字以外が比較できるのでしょうか
どのようなルールで比較してるのでしょうか

これは文字列の順序が上か下か同じかを判定しているものであると思います。

よって、数字とひらがなであっても比較できます。

“`
数字 < アルファベット(大) < アルファベット(小) < ひらがな

元記事を表示

【Flutter】検索機能の実装方法

## 初めに
この記事ではコンテンツを検索する際の簡単な検索機能を実装します。
検索機能はSNSなどをはじめ、様々なアプリに実装されており、自身で実装する機会もあるかと思います。ここでその実装方法を学習しましょう!

## 記事の対象者
+ アプリに検索機能を実装したい方
+ TextField の活用方法を学びたい方
+ Riverpod を用いた動的な機能の実装方法を学びたい方

## 完成イメージ
![search_example.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2609901/fcf8b9c3-a31e-d037-c103-a5d258f2d7e0.gif)
上のように、検索している時としていない時で AppBar のアイコンや ListView の表示する項目を変更しています。
また、 ListView のタイルを押すと次のページへ遷移するようにしています。

## 全体コード
全体のコードは以下の通りです。

“`dart: search_page.dart
import

元記事を表示

NewsPicksっぽい遷移アニメーションの実装方法

このモーダル遷移アニメーションを実装してみました。
![Videotogif.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/662300/db256da5-343f-91f9-a624-b9b029f24737.gif)

作ったのがこれです。(ごちゃごちゃしてる方が動きが見えやすかったのでwebViewで表示してます。)
![Videotogif (1).gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/662300/996ce2d5-e9a7-8ec2-3607-503642224150.gif)

中身としてはCATransitonを使用して、
“`swift
func transitonAnimation() {
let transition = CATransition()
transition.duration = 0.4
transition.typ

元記事を表示

LazyVGridとかLazyVStackのカラムにアニメーションをつける時の注意点

## はじめに
最近はSwiftUIを触る機会が多いのですが、Table形式やCollection形式のViewを作るときは、Lazy〇〇を使うようにしています。
そんなこんなやっていた時に、LazyVGridをスクロールした時にバグが発生する問題に直面し、若干ハマったので解決方法を記事にしてみました。
ちなみにですが、iOS15のみ対応のアプリだと`warning`が出るので、このバグに直面することは少ないんじゃないかと思います!

## バグの正体
スクロールした時にセルの描画が遅れたような感じになってしまいます。
![バグ.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/580445/718783e7-5013-93f4-e4d1-72a0947a1960.gif)
この時のコードは下記です。
このViewでは、各Cellをタップした時に、青からオレンジに背景色を変えるところをアニメーションにしています。

“`swift
import SwiftUI

struct ContentView: V

元記事を表示

【Unity】顔だけVTuberになるARアプリを作った【実装編】

こんにちはっ?八ツ橋まろんです

iPhoneの顔認識の機能を使った **顔だけVTuberになるiPhoneアプリ『Virtual Face』を作りました**

この記事では、内部の動作と実装について書いていきます。

動作デモ↓↓

# 0. 初回起動時のチュートリアル

アプリを最初に起動したときに出てくる使い方画面。どんなアプリでも実装されていますが、Unityで開発するときは、PlayerPrefesを使うことで簡単に作成できました。

PlayerPrefesを使えば、int, float, stringの簡単な変数なら簡単に保存したり、呼び出したりできます。

“`csharp:
public GameObject tutorial;

// PlayerPrefesに”Tutorial”という名前でデータが保存されているか確認し、
//データ内容が1ならチュートリアルをスキップする
voi

元記事を表示

【Swift】アプリがバックグラウンドからフォアグラウンドに切り替わった事を検知する

# はじめに
フォアグラウンドになった事を判定することがあったので記事に残しておきます。

# 実装
“`swift
import UIKit

class ViewController: UIViewController {

override func viewDidLoad() {
super.viewDidLoad()

NotificationCenter.default.addObserver(
self,
selector: #selector(foreground),
name: UIApplication.willEnterForegroundNotification,
object: nil
)

}

@objc func foreground() {
print(“フォアグラウンド”)
}
}
“`

# おわり
`NotificationCenter`を有効活

元記事を表示

iOSアプリリリース時、Guideline 4.3 – Designでリジェクト

# 概要
先日iOSアプリをリリースしようとした際、`Guideline 4.3 – Design`でリジェクトされたので、その時にやった事のまとめ。

# 大まかな流れ
AppStoreにアプリ提出(1回目)

`Guideline 4.3 – Design`でリジェクト

修正を加えて再提出(2回目)

`Guideline 4.3 – Design`でリジェクト

修正を加えて再提出(3回目)

`Guideline 4.3 – Design`でリジェクト

同じ機能セットを持つアプリはどれなのか質問

`Guideline 4.3 – Design`でリジェクトはされず(これとは関係ない他の箇所を指摘された)

指摘された箇所を修正し提出(4回目)

無事リリース

# リジェクト内容
Google翻訳したものを掲載。

“`
ガイドライン 4.3 – 設計

あなたのアプリは、App Store に提出された他のアプリと同じ機能セットを提供していることに気付きました。 内容や言語が異なるだけで、スパムの一種と見なされます。

このアプリの次回の提出には審

元記事を表示

コピペでFlutterサンプル その6

[前の記事 コピペでFlutterサンプル その5](https://qiita.com/netineti512/items/33655116850741105099)

[参考](https://docs.flutter.dev/cookbook/effects/parallax-scrolling)
“`sample.dart
import ‘package:flutter/material.dart’;
import ‘package:flutter/rendering.dart’;

const Color darkBlue = Color.fromARGB(255, 18, 32, 47);

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

class MyApp extends StatelessWidget {
const MyApp({super.key});

@override
Widget build(BuildContext context) {
return MaterialApp(
the

元記事を表示

コピペでFlutterサンプル その5

[前の記事 コピペでFlutterサンプル その4](https://qiita.com/netineti512/items/432f7b7856f452c886e9)

[参考](https://docs.flutter.dev/cookbook/effects/photo-filter-carousel)
“`sample.dart
import ‘dart:math’ as math;

import ‘package:flutter/material.dart’;
import ‘package:flutter/rendering.dart’ show ViewportOffset;

void main() {
runApp(
const MaterialApp(
home: ExampleInstagramFilterSelection(),
debugShowCheckedModeBanner: false,
),
);
}

@immutable
class ExampleInstagramFilterSelection

元記事を表示

Xcodeでのsimulator起動時に文字入力でキーボードが表示されない時の解決法

Xcode Version 13.4.1 (13F100)
Swift version 5.6.1

スクール学習でメモアプリを作成練習中、シミュレーターを起動してキーボードの表示非表示の切り替えをする機能を実装していたら、キーボードが表示されなかったので表示させるための対応をメモ。

状態

![キーボードが表示されない.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2821821/c05d32d5-1511-2fd0-80cc-54edeb7d1b28.png)

iPhone画像の一番下にキーボード非表示ボタンの「Done」だけが表示されている状態。

やりたいこと

![スクリーンショット 2022-09-06 9.17.41.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2821821/427a25de-c3ad-3a3f-4c9e-583e146dafe3.p

元記事を表示

【SwiftUI】Circleが動くアニメーションCustom TabBar

## はじめに
アニメーションを持つCustom TabBarをつくる
そのためには`GeometryReader`を利用する必要がある

## 環境
Xcode: 13.3.1

## Code

“`swift
enum TabIndex {
case home, cart, profile
}

struct customTabView: View {

@State var tabindex : TabIndex

func tabCirclePostion(tabIndex: TabIndex, geometry : GeometryProxy) -> CGFloat {
switch tabIndex{
case .home:
return -(geometry.size.width/3)
case .cart:
return 0
case .profile:
return geom

元記事を表示

【SwiftUI】Loading時のアニメーションを追加する

## はじめに
Loading時のアニメーションを追加する

## 環境
Xcode: 13.3.1

## Code
“`swift:LoadingView.swift
struct LoadingView: View {

@State var isLoading : Bool = false
var body: some View {
VStack{
Button {
Task{
isLoading = true
try await Task.sleep(nanoseconds: 5_000_000_000)
isLoading = false
}
} label: {
Group{
if isLoading {

元記事を表示

OTHERカテゴリの最新記事