iOS関連のことを調べてみた2020年08月15日

iOS関連のことを調べてみた2020年08月15日
目次

[SwiftUI]actionやalertを2つ連続して使うときのハマりどころ

SwiftUIで`.action`や`.sheet`を使うときに、ハマってしまって時間を浪費してしまいました。その解決策のメモです。

## どのような問題か

下記のように`.alert`を2つつなげた場合、後のalertしか表示されませんでした。

“`swift
struct ContentView: View {

@State var presentAlert1: Bool = false
@State var presentAlert2: Bool = false

var body: some View {
VStack(spacing: 32) {
Button.init(“アラート1”) {
self.presentAlert1.toggle()
}
Button.init(“アラート2”) {
self.presentAlert2.toggle()
}

元記事を表示

【Flutter】Flutterの複数バージョンを共存させる方法

## この記事で話すこと
FlutterのバージョンをStableやMasterなど複数共存させる際に数秒で切り替える方法をお伝えします。

## 背景
Flutter 1.2.0がリリースされて、アップデートしたが、あるプロジェクトで動作しないライブラリがあったため、
Flutter ‘Stable’と’1.17.4’を同居させる必要がありました。

毎回アップグレード、ダウングレードを実施しているとその度に10分程度失うことになるので、何かないかと探していたところfvmというものがあるらしかったので、使用したらいい感じだったので紹介です。

## fvmとは
[fvm](https://github.com/leoafarias/fvm)

>Flutter のバージョン管理。Flutter SDK のバージョンを管理するためのシンプルな cli です。

>FVM は、プロジェクトごとに使用される Flutter SDK のバージョンを参照することで、一貫したアプリビルドの必要性をサポートします。また、複数の Flutter バージョンをインストールしておくことで、毎回 Flut

元記事を表示

新しいmapを使ってみた

# はじめに
Apple Developer DocumentationをみるとMapKit中に[struct Map](https://developer.apple.com/documentation/mapkit/map)が増えています。
どうもSwiftUIで直接mapが表示できるようになったようです。
実際に作ってみました。
サンプルプロジェクトは[github](https://github.com/FromF/MapSwiftUI)にアップしてあります。

# コードの解説

[サンプルプロジェクト](https://github.com/FromF/MapSwiftUI)のポイントを紹介します。

## Mapを表示する

“`swift
@State var coordinate = MKCoordinateRegion(center: CLLocationCoordinate2D(latitude: 36.0, longitude: 138), latitudinalMeters: 2000000, longitudinalMeters: 2000000)
Map

元記事を表示

CocoaPodsインストール時に発生する「ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES」の意味と対応方法2つ

# はじめに

CocoaPodsをインストールしたときに、「ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES」に関する警告が表示されることはありませんか?
この記事では、その意味と対応方法を2つご紹介します。

# 発生する事象

pod install を実行した場合、以下のようなメッセージが表示されることがあります。
以下は、MyAppというプロジェクト名・ターゲット名のアプリの例です。

## Terminalに表示される警告メッセージ

“`
[!] The `MyApp [Debug]` target overrides the `ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES` build setting defined in `Pods/Target Support Files/Pods-MyApp/Pods-MyApp.debug.xcconfig’. This can lead to problems with the CocoaPods installation
– Use the `$(inher

元記事を表示

iOSのネットワーク接続状態の検出にはReachabilityよりシンプルなNWPathMonitorを使いましょう。

iOSでネットワーク接続状態の取得といえば`Reachability`を使うといった印象が強くありませんか。

`Reachability`を使うには、まず
https://developer.apple.com/library/archive/samplecode/Reachability/Introduction/Intro.html
からApple の提供しているサンプルコードをダウンロードして・・・なんて手間がありましたが、もっと手軽に利用できるApple標準のクラスがありました。

# 簡単にネットワーク接続のモニタリングが可能

元記事を表示

【iOS】Pythonista3でQiitaのトレンドを表示してくれるウィジェットを作った。【Python】

#はじめに
iPhone, iPadユーザーの皆さん、iOS端末上でPythonでの開発ができる[Pythonista3](https://apps.apple.com/jp/app/pythonista-3/id1085978097)というアプリはご存知でしょうか?
Pythonを実行するだけであれば個人的には[Carnets – Jupyter](https://apps.apple.com/jp/app/carnets-jupyter/id1450994949)がおすすめですが、
Pythonista3では各種ショートカットやウィジェットなどといったアブリ外から使用可能な機能の開発や、ゲームを作ることも出来ます。

今回はそんなPythonista3を使って
**Qiitaのトレンドを表示してくれて、クリックするとSafariでそのページを開いてくれるウィジェット**
を作成したので紹介したいと思います。
![qwid.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/501281/dd91298e-

元記事を表示

【Flutter】超簡単!要素を画面いっぱいに表示する方法【Expanded】

#この記事を読んで習得できること
Flutterの画面作成で「画面いっぱいに要素を表示したい」っていう問題を解決する力(多分)

#結論
・`Expanded`を使って要素を隙間いっぱいに大きくする
#こんな感じ
![スクリーンショット 2020-08-14 15.14.30.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/389553/74f6e974-c974-be98-40e8-216eea3d2469.png)

#とりあえず、書いてみる

“`main.dart
class _MainViewControllerState extends State {
@override
Widget build(BuildContext context) {
return Scaffold(
body: Column(
children: [
Container(
decora

元記事を表示

TFCoreMLで変換したモデルの出力がおかしい時の対処法

WWDC2020あたりを境に、tfcoremlで変換したGANの出力が全部真っ白になりました。
##対処法
Core ML Tools 4.0をインストールして変換し直す。

“`shell
pip install coremltools==4.0b2
“`

tfcoremlに比べて、変換メソッドのオプションがシンプルに変わっています。

“`python
import coremltools as ct
image_input = ct.ImageType(shape=(1, 256, 256, 3,),
scale=2/255,bias=[-1,-1,-1])

coreml_model = ct.convert(
yourmodel,
inputs=[image_input],
)
coreml_model.save(“yourmodel.mlmodel”)
“`

これで出力されました。

IMG_8701.JPG

元記事を表示

ReactNative × FirestoreでiOSアプリを作成する手順とまとめ

# ■概要

## CloudFirestoreとは

Firebaseが提供している、NoSQLベースのデータベースのうちの一つ(MBaasの一つ)

RealtimeDatabase → CloudFirestoreに進化!

Q、何が改善されてる?
A、データモデルの改善、クエリ強化されている。

## Firebaseの機能とデータベース

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/586262/29c5ff60-81fd-af34-eb6b-5255e75d28ec.png)

# ■準備

– Firebaseプロジェクトのセットアップ

Firebase公式ページからコンソール画面に移動して、新規アプリ作成。

プロジェクトIDとロケーションは**後で変更が出来ない**ので、注意!

※国内向けサービスの場合、asia-northeast1(東京)or asia-northeast2(大阪)

– バックエンド側のセットアップ

元記事を表示

【入門】iOS アプリ開発 #4【アーキテクチャの設計】

# アーキテクチャの設計

今回はパックマンのゲームを構築するにあたり、全体のアーキテクチャを設計する。

仕様書から画面モードは4つあり、それぞれのモード内にはキャラクタがいて移動処理などがある。これらを1つ1つのオブジェクトとして管理し扱っていく。

![Image2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/678332/2a570726-a266-ca09-2a2e-ab180a14be1b.png)

# 設計方針

各画面モードをオブジェクトとして扱い、簡単に切り替え操作したい。

“`swift
attractMode.startSequence()
// ・・・アトラクトモード実行中・・・

// アトラクトモードからクレジットモードへ切り替える
attractMode.stopSequence()
creditMode.startSequence()
// ・・・クレジットモード実行中・・・
“`
こんな感じ。

またイベント・メッセージを画面モード内のオブジェクトにも簡単に通

元記事を表示

【Swift】正規表現で含有判定

# 文字列を含んでいるのか
* 正規表現パターン:`pattern`を引数で渡し、含んでいるのか評価した結果をtrue/falseで返します。
* エラーがthrowされた場合、正規表現が間違えています

“` swift
extension String {
func contain(pattern: String) -> Bool {
guard let regex = try? NSRegularExpression(pattern: pattern, options: NSRegularExpression.Options()) else {
return false
}
return regex.firstMatch(in: self, options: NSRegularExpression.MatchingOptions(), range: NSMakeRange(0, self.count)) != nil
}
}
“`

# 利用方法
### 実装

“` swift
pri

元記事を表示

【Flutter】グラデーション使用時に境界線が見える問題

# 概要
グラデーション使用時に境界線が見えてしまう場合がある。
[画面描画時のディザリング](https://api.flutter.dev/flutter/dart-ui/Paint/enableDithering.html)を有効にする事により、滑らかに表示する事ができる。

## 再現
“`dart
import ‘package:flutter/material.dart’;

class App extends StatelessWidget {
static const String _title = ‘Gradient Test’;

@override
Widget build(BuildContext context) {
return MaterialApp(
title: _title,
home: Container(
decoration: BoxDecoration(
gradient: LinearGradient(
colors: [Color(0

元記事を表示

【Flutter】安心してレポジトリを公開するために必要なgitignoreの設定

#この記事を読んで習得できること
Flutterのフォルダを安心してgithub or gitlabに載せられるようになる

#結論
`.gitignore`に
`!*/.gitignore`を追加する

これより下は時間がある人だけでいいですよん

#安心して,とは…?
Flutter関係の記事を載せようと思っていて、その際にソースコードも公開したいなーと思っていた。

全世界に公開するのなら、自分のPC内の情報は載せたくないなー(当然)と思っていたので、フォルダ内に自分の情報が載っていないか、調べてみた。

調べたっていっても、そんなたいそうなことはしてなくて、
フォルダ内のソースを、以下の文章で検索してみるってだけ。
`/Users/<自分で付けたPCのユーザー名>/`

すると、結構な分量が出てきてしまった。

![スクリーンショット 2020-08-13 19.52.30.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/389553/e498988b-b9dd-d61a-510b-26da20c

元記事を表示

【iOS】Pythonista3でGIFアニメを分解する。

# はじめに
以前、[GIFアニメでハマった記事](https://qiita.com/maboy/items/17816eda284d1fefd5e5)を書きましたが、その時に調べたなかで**GIFアニメの分解**に興味があったので作ってみました。

# GIFアニメを分解する
これは**PIL**の中の**ImageSequence**でできました。
ついでに、iOSの共有シートから呼び出す仕様にしました。

“`python:gif2png
import appex
import console
import photos
import tempfile
from PIL import Image
from PIL import ImageSequence

def main():
if not appex.is_running_extension():
console.hud_alert(‘共有シートから実行して下さい。’,icon=’error’,duration=2)
return

FilePath = appex.get_image().filename

元記事を表示

Fastlane での Rebuild from Bitcode オプションの付け方

### Bitcode とは?

iOS9から導入された技術で LLVM の中間言語のことを指します。以前まではコンパイルが完了しているものを Apple に提出していましたが、Bitcode を用いることで Apple 側で最適化してコンパイルを行えるようになります。

### Bitcode を用いたくない場合

基本的にアプリで Bitcode を有効にする場合は、依存しているライブラリなども全て Bitcode に対応している必要があります。そのため、Carthage などでコンパイル済みのバイナリを使用するような時にライブラリの Bitcode が有効になっていない場合はアプリを配信するときなどにプロジェクトの Bitcode を無効にする必要があります。

### Xcode から配信する場合

`Rebuild from Bitcode` のチェックボックスを外せば無効にできます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/292456/07f90d57-f661-5

元記事を表示

[Swift] Viewの下にViewが隠れてしまった

viewの下にviewが隠れてしまったことがありました。
## 該当のソースコード

“`swift
override func viewDidLoad() {
super.viewDidLoad()

showAlert()
secondScreenUI()
}
“`

`showAlert()` はアラートを表示させる関数です。
`secondScreenUI()`は画面のUIが定義されている関数です。

## 想定していた動作
スクリーンショット 2020-08-13 17.31.50.png

## 実際の動作

![スクリーンショット 2020-08-13 17.34.05.png](https://qiita-image-store.s3.ap-northeast-1.ama

元記事を表示

【iOS】Pythonista3でGIFアニメのコマごとの表示時間を変更する。

# はじめに
以前、[GIFアニメでハマった記事](https://qiita.com/maboy/items/17816eda284d1fefd5e5)を書く際に[GIFフォーマットの詳細](http://www.tohoho-web.com/wwwgif.htm#ImageBlock)という素晴らしい記事が見つけました。
GIFファイルの中の画像にはそれぞれディレイタイムが2バイトで設定されており、0.01秒単位で設定できるようです。

# 目標は【Graphic Control Extension】
GIFファイルの中には画像データがあるのは当然ですが、画像データの前には**Graphic Control Extension**という8バイトのブロックがあるそうです。
### Graphic Control Extension
– Extension Introducer(1B) = 0x21   <= 印 1 - Graphic Control Label(1B) = 0xf9  <= 印 2 - Block Size(1B) = 0x04       <= 印 3 - R(3

元記事を表示

【SwiftUI】@Bindingや@Stateをつけたプロパティをイニシャライザで初期化する

# Error: ‘self’ used before all stored properties are initialized

こんな感じで素直にイニシャライザを定義してしまうと、上記のエラーが発生します。

“`swift:WrappedTextField.swift
struct WrappedTextField: View {
private var placeholder: String?
@Binding private var textContent: String

init(placeholder: String? = nil, textContent: String) {
self.placeholder = placeholder
self.textContent = textContent
// Swift Compiler Error
// ‘self’ used before all stored properties are initialized

元記事を表示

SwiftでArrayの中の全ての要素が、特定の条件を満たすかどうか判定する方法

Swift4.2からは `allSatisfy` メソッドが提供されています

ドキュメント: https://developer.apple.com/documentation/swift/array/2994715-allsatisfy

例:

“`swift
struct Item {
var id: String
var hasStock: Bool
}

let category1 = [
Item(id: “1”, hasStock: true),
Item(id: “2”, hasStock: false),
Item(id: “3”, hasStock: true)
]

let category2 = [
Item(id: “1”, hasStock: false),
Item(id: “2”, hasStock: false),
Item(id: “3”, hasStock: false)
]

print(category1.allSatisfy { $0.hasStock == false })

元記事を表示

iOSアプリのHTMLテンプレートに基づいてPDFを作成します(例えばレシート)

「大好きなお弁当屋さんのレシートアプリを作ろう!」

この例では、お客さんの購入した品目を入力し、PDFレシートを生成できるレシートアプリを作ります。PDFレシートはHTMLテンプレートに基づいて生成されます。

image.png

image.png

## この記事で学ぶこと:

– 表を含むウェブページのコーディング(簡単)
– PDFファイルをHTMLの文字列から生成
– PDFのプレビューウィンドウを表示

## スタータープロジェ

元記事を表示

OTHERカテゴリの最新記事