iOS関連のことを調べてみた2019年12月31日

iOS関連のことを調べてみた2019年12月31日

Github ActionsでiOSアプリのデプロイを自動化する

元ラーメン屋店長プログラマのObjective-ひろC([@hirothings](https://twitter.com/hirothings))です?
GitHub Actionsで[個人アプリ](https://apps.apple.com/jp/app/id1460380962)のデプロイを自動化したのでその手順を書きます。

目次

1. GitHub Actionsとは?
2. なぜGitHub Actionsをデプロイ環境に選んだか?
2. 実装の流れ

## GitHub Actionsとは?
「GitHub上で動作するサーバレス実行環境」で、GitHub関連のイベントをトリガーにCI/CD様々な処理を実行できます。
[中の人がGitHubの概要について説明しているわかりやすい記事](https://codezine.jp/article/detail/11450)があるので、それを読むのがオススメです。
以下、抜粋。

>
* Actionの実体はDockerコンテナ
* Actionを組み合わせて独自のワークフローを構築できる
* コンテナ実行環境がコンパクトで重い

元記事を表示

【Human Interface Guidelines】Modality機能 和訳

モバイルアプリを設計する上で、モーダルウィンドウ機能についてiOSの推奨を理解しましょう。
「[Human Interface Guidelines](https://developer.apple.com/design/human-interface-guidelines/ios/app-architecture/modality/)」のModalityの章について紹介します。
モバイルアプリは、ユーザーの実現したい目的のために画面が遷移していくことが基本です。
(AppStoreでは特定のアプリ詳細ページに遷移して、アプリをインストールする目的のためなど)
しかしユーザーにメッセージを伝えるために、一時的にユーザーストーリー(想定する画面遷移)から離脱したい場合があります。
その際に、ユーザーに不快感を与えることなく、実装することが求められます。

## 前提

モーダルウィンドウ機能は、ユーザーの現在開いているコンテンツとは独立しており、一時的に表示するためのデザイン手法です。
そのため、モーダルウィンドウを閉じるための明示的なアクションが必要となります。
コンテンツをモーダル

元記事を表示

【iOS】Swiftファイルのヘッダーコメントをカスタマイズする

#概要
iOSの開発をする際にXcodeでファイルを追加すると、ファイルのヘッダーに以下のようなコメントが入るかと思います。

“`swift:Sample.swift
//
// Sample.swift
// SampleProject
//
// Created by ~~~ on 2020/12/30
// Copyright © 2020 ~~~. All rights reserved.
//
“`

複数人で開発をする際に、上記コメントを合わせたかったので、コメントのカスタマイズする方法についてまとめてみました。

#環境
Xcode: 11.2.1
Swift: Swift5

#手順1
「IDETemplateMacros.plist」を生成します

#手順2
手順1で生成したファイルに以下を追加します。
(サンプルでは作成者・作成元を非表示としました)

“`xml:IDETemplateMacros.plist

元記事を表示

初心者のためのswift、Xcodeで画面遷移をする方法(アウトプット& 復習用) 

今回はxcodeでの画面遷移についてです
この情報はよく出回っていることだと思いますが、自分なりに書きました!
「なんで遷移するのか?」や、「なんでこのコード必要なの?」、などの説明は
この記事で説明しておりません!
画面遷移方法の一つを紹介する記事となっています!

Modalによる遷移

まずは最初にMainStorybordに遷移先のViewcontrollerをおきます!
(右上の十字マークのところから持ってきます)

次にcommand + N を押してCocoa Touch Classを選択します
スクリーンショット 2019-12-29 20.36.28.png

その次に遷移先のviewcontolloer.swiftの名前を変更します。
私は適当に次の遷移先なのでNextView

元記事を表示

アダプターをSwift5で実装する

※この記事は「全デザインパターンをSwift5で実装する」https://qiita.com/satoru_pripara/items/3aa80dab8e80052796c6 の一部です。

###The Adapter(アダプター)

####0. アダプターの意義

レガシーコード(古いコード)や、他者製のコード(外部ライブラリなど)を使う際、自分の書いたコードと実装形式などが違う事がある。そういったコードを用いる際、いちいち自分のコードと適合する形に直さなければならないとすると非常に手間がかかる。

アダプターパターンはそういったコードを自分のコードから扱いやすい形に修正してくれるデザインパターンである。

元のコードがどういった実装をしていたか? などをいちいち意識する事なく自分のコードに適合させられるため、時間と労力の節約につながる。

注意点としては、外部のコード等がもともと期待する機能を持っていないのにアダプターパターンを使って無理に他のコードと統合しようとしてはいけないという事である。それはアダプターの能力を超えている。そういったケースは単純に外部のコードの選定ミスな

元記事を表示

【Carthage】failed with exit code 128: fatal: could not read Username for ‘https://github.com’: terminal prompts disabled

# 概要
Carthageでレポジトリを指定して、

“`shell
carthage update –platform ios
“`

を実行すると

“`shell
A shell task (/usr/bin/env git fetch –prune –quiet https://github.com/Qiuck/Nimble.git refs/tags/*:refs/tags/* +refs/heads/*:refs/heads/*
(launched in /Users/[user_name]/Library/Caches/org.carthage.CarthageKit/dependencies/Nimble)) failed with exit code 128:
fatal: could not read Username for ‘https://github.com’: terminal prompts disabled
“`

というエラーが出た。

# 解決策

解決策ってほどのものでもなく、 **Cartfileのレポジトリ名がtypoってた*

元記事を表示

[はじめてのiOSアプリ]xcodeで地図アプリを作成(その8)

# はじめに

iOSアプリを作ってみたいけど
何から始めて良いのかわからない

とりあえず、
「やってみました」記事を参考に
地図アプリを真似てみようと思う

という記事の8回目です。

今回は、地名の取得と表示(Reverse Geocoding)までします。

# 位置情報から地名に変換するサービス
– 今回使うのは [Finds.jp](https://www.finds.jp/rgeocode/)
– 【なぜ?】
– 利用する準備が簡単(登録不要で利用可能)
– やっぱり「やってみました」は簡単にやってみることができるのは重要!
– 今回は、日本国内の地名に変換できれば十分だから
– キーワード「reverse geocoding」で検索してみると、いろいろ見つかる
– 気になる人は、いろいろ試してみると良いですよ

## 簡単な Finds.jp の使い方
– ブラウザで以下のアドレスを表示してみる
– [https://www.finds.jp/ws/rgeocode.php?lat=35.6804725&lon=139.

元記事を表示

【Human Interface Guidelines】Loading機能 和訳

モバイルアプリを設計する上で、ローディング(読込み)機能についてiOSの推奨を理解しましょう。
「[Human Interface Guidelines](https://developer.apple.com/design/human-interface-guidelines/ios/app-architecture/loading/)」のLoadingの章について紹介します。
モバイルのアクション処理では、機械学習を用いた高負荷な演算処理や、大容量データの取り扱いなど、
ユーザーに不快感を与えることなく、実装することが求められます。

## 前提
コンテンツの読込み中に、空白または静的な画面が表示されていると、アプリがフリーズしているように見えます。
ユーザーや混乱とフラストレーションが生じ、アプリから離脱してしまう可能が高まります。
![iPhone-Loading.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/168714/c5929440-e98d-59c7-866c-a5e3290131e6

元記事を表示

iPodをwebサーバとして使う

#はじめに
初めてまして
初投稿です!
今回はiPodでApacheを動かす方法について書きたいと思います(需要…)

#環境
iPod touch (6th generation)
ios 12.4.4

#iSHをインストール
まず「[TestFlight](https://apps.apple.com/jp/app/testflight/id899247664?ign-mpt=uo%3D4)」をインストールします.
次に[公式サイト](https://ish.app/)のJoin the TestFlight beta!のTestFlight betaをクリックしてiSHをインストールできます.

#Apache2の導入
iSHを起動したら
“`apk add apache2“`
を実行するとApache2がインストールされます.
Apache2の設定ファイルは
“`/etc/apache2/httpd.conf“`
ルールディレクトリは私の環境では
“`/var/www/localhost/htdocs“`
でした.
次に
“`httpd -D UNDERGR

元記事を表示

脱獄検知回避アプリを解析する Liberty lite


typora-copy-images-to: ipic

執筆途中

本記事では脱獄についての説明は省きます。

## 脱獄者 vs 開発者

今まで脱獄者は開発者にとって無視できない不都合な事象(アプリケーションの解析やチート、海賊版の作成 etc…)をもたらしてきました。これらの行為を防ぐべく、多くの開発者は__脱獄を検知__してアプリケーションの挙動を変えることで対策しました。

脱獄者の中には少なからず_開発者_や_セキュリティリサーチャー_といった類の「職」を持つ人々がいます。そしてこれらの人々の一部(野心的なデベロッパー・ハッカー)にとって脱獄検知という技術は非常に興味深いものであることに間違いありません。彼らもまた、__脱獄検知を回避__するという手段を通じて開発者に対抗しました。

__これは終わらないイタチごっこに違いありません!__

実際、今まで_Cydia_をはじめとした脱獄アプリストアには多くの__脱獄検知回避Tweak__が並んできました。

_Xcon, BreakThrough, FLEX, Liberty, Lib

元記事を表示

SwiftでURLSessionを用いて汎用的なAPI Clientを作成

## はじめに
Swiftを勉強し始めたひよこです。
API処理周りで結構苦労したので記録用に記載します。
普段はAWS周りのインフラレイヤ触ることが多いので、やってることが正しいのかどうかすら自身ありません、、

## 課題
Alamofireなどのライブラリを活用せず、標準ライブラリであるURLSessionを用いたAPI Clientを作成したかったのですが、思い通りに動作させるのに下記の課題にぶち当たりました。

– 任意の型のResponseに対応できない
– Responseだけでなく、エラーも呼び出し元に返したい
– テスト時にスタブに差し替えたい

## 解決方法
### どうやって解決したか

それぞれの課題について下記の対応で乗り切りました。

– 任意の型のResponse → Genericsで型を抽象化
– エラーも呼び出し元に返す → Responseとエラーを含む構造体を作成し、内容を詰める
– スタブ差し替え → Protocolを実装

### 作成したコード

最終的に作成したコードは下記です。
簡単のためPost部分のみ記載しています。
Heade

元記事を表示

サルでもできるPython(kivy)でiOSアプリ開発

#はじめに
機械学習とかデータサイエンスの分野で活躍しているPythonですが、GUIも地味に優秀で、今回用いるkivyはビルドによってデスクトップでもAndroidでもiOSでも動くアプリケーションが作れます。

今回は、アプリなんて作ったことないけどPythonはある程度知ってる方向けに簡単な解説をさせていただきます。
自分への備忘録もかねて。。

#kivyとはなにか
Pythonのライブラリの一つで、GUI(グラフィカルユーザーインターフェース: 黒いコンソール画面ポチポチじゃない)を簡単に作ることのできるものです。

[日本語リファレンス](https://pyky.github.io/kivy-doc-ja/)も存在していて、今現在も開発が行われているライブラリです。

使い方に関しては他の多くの方が分かりやすくて丁寧な記事を書いていらっしゃるのでここでは省略します。今回はアプリにすることを前提に話を進めます。

#必要なもの

– kivy-ios
– Python 3系
– Mac OS搭載PC(残念ながらXcodeが必要なのでWindows, Linux系ではできませ

元記事を表示

WKWebViewのCookieを使ってURLSessionでWEBAPIを叩く

# 経緯
iOSアプリを開発しているとき、WKWebViewでユーザー認証をしたあとにその認証情報(Cookie)を使ってWEBAPIを叩いてユーザーの情報等を把握したいことがあります。
しかしながら、どうやらWKWebViewとWEBAPIを叩く時に標準的に使われるURLSessionではCookieは暗黙的に共有されていないようです。
そこで、URLSessionでWKWebViewのCookieを使用するためにはどのようにしたらいいのかを書いていきます。
もしも、WKWebViewのCookieを使って簡単にWEBAPIを叩く方法がある場合は教えてください!!

# 流れ
1. WKWebViewからCookieを取得する。
2. CookieをHTTPヘッダーに埋め込む形に変形させる
3. URLSessionでGET(POST)するときにHTTPヘッダーにCookieを追加

# WKWebViewからCookieを取得する
特定のドメインに利用されるCookieをWKWebViewから取得します。この工程は先ほどの流れの1と2です。
今回はCookieを常に保持しておきたか

元記事を表示

ファクトリー・アブストラクトファクトリーをSwift5で実装する

※この記事は「全デザインパターンをSwift5で実装する」https://qiita.com/satoru_pripara/items/3aa80dab8e80052796c6 の一部です。

###The Factory(ファクトリー)

####0. ファクトリーの意義

複数のオブジェクト間で共通するプロトコルやスーパークラスがある場合に、それを利用してオブジェクトを生成する事をファクトリーという。

利用する側は、プロトコル・スーパークラスのみ知っていればよく、個々のクラスの実装について知る必要がないため実装が容易になる。また個々のクラスに変更が加わっても利用する側には影響しなくなる。

####1. ファクトリーを利用しない場合

– 生成される側

“`swift:Theme.swift
import UIKit

public protocol Theme {
var backgroundColor: UIColor { get }
var textColor: UIColor { get }

}

public struct LightTheme:

元記事を表示

SwiftUI Pickerの値をenumと連動

#やりたいこと
Pickerの表示項目と選択を、モデル内のenumで管理したい

|![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/59249/f2d630ce-3784-536e-0784-5729c5bf2154.png)|![image.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/59249/159e1305-5bf0-2788-0f42-0ca004ac6de4.gif)|
|:-:|:-:|

##enumの値をモデル内に設定

ポイントは、enumをCaseIterableに指定すること

“`swift:Model
class Model:ObservableObject{
//enumはrawValueとしてString
//PickerのForeachで使えるようにCaseIterableに指定
enum Mode:String,CaseIterable{

元記事を表示

SwiftUIとFirebaseを使って簡単なチャットアプリを作る

# はじめに
FirebaseとSwiftUIを使ってチャットアプリを作ります。

# 仕様
チャットアプリは最初にユーザー名を入力しチャット画面に入ると自分とそれ以外のユーザーで区別されたメッセージ一覧が表示されます。
今回は、ユーザー認証などありません。単純にリアルタイムデータベースを読み書きしてチャットします。

gRPCでサーバー・クライアントを繋げてみる(iOS編)

[Aizu Advent Calendar](https://adventar.org/calendars/3938) の22日目の記事です。
大遅刻しました。申し訳ないです。。

gRPCでサーバー・クライアントを繋げてみたもののiOS編です。

## gRPCとは
[こちらの記事](https://qiita.com/oohira/items/63b5ccb2bf1a913659d6)でわかりやすく簡単に紹介されています。

gRPC自体は `.proto` ファイルを使用し、それを元に生成したコードを使用してクライアントから簡単にサーバー側のデータを取得することができるものです。
上記の点から、特定のエンドポイントに対して必要な値を載せてリクエストを飛ばして○○というデータが返ってくるというAPI定義書を作成することなく使用する側はサーバーからデータを取得することができます。

また、HTTP/2を使用、データ取得関数使用時にシリアライズを行うため、高速に通信することができます。

## 実装編
### `proto` ファイルを定義する
クライアントとサーバーにとっての共通のイ

元記事を表示

flutter iOSでビルドできない時の対処法

初めてQiitaに投稿してみます、、、

## 現象
* **flutter** と**Android Studio**を使い始めて数週間のペーペーです。
* simulator.appのiOSのシミュレータで、`run`を実行すると、以下のようなビルドの失敗が続くようになりました。

“`
Launching lib/main.dart on iPhone Xʀ in debug mode…
Running Xcode build…
Xcode build done. 12.2s
Failed to build iOS app
Error output from Xcode build:

** BUILD FAILED **

Xcode’s output:

/build/ios/Debug-iphonesimulator/Runner.app: resource fork, Finder information, or similar detritus not al

元記事を表示

簡単なiOSアプリの開発費相場の意識調査結果

最近Twitter経由で個人での簡単なiOSアプリの受託開発の打診を受け、費用を伝えると連絡が途絶えました。具体的な内容は書けないのですが、以下のような案件です。

– 実装期間は2日(かなりシンプルな機能でこれ以上はかかりそうにない)
– 実装可能か要検証な機能有り
– アイコン画像等のリソースは発注元が作成
– App Store申請作業込み(シンプルな為リジェクト対応が必要になる可能性あり)

見積もりとしては合計20万円と出しました。

そこで以下のようにツイートでアンケートをとってみました。

OTHERカテゴリの最新記事