PG WORKS

PHPやLinux(サーバー)などのノウハウや、便利なツールを紹介していきます。

【Swift】iOSアプリ開発メモ

iOSアプリ(ゲーム以外)で良いところ&審査に出す前に注意する点をまとめてみました。

プロジェクト内にPodファイルを設定&設置してインストールコマンド(pod install)をながすことで利用できる。

・例)podファイルの中身
――――――――――――――――――
platform :ios, '11.0’

target ‘sampleproject’ do
use_frameworks!

pod 'Alamofire'
pod 'SDWebImage'

end
――――――――――――――――――

Alamofire:ウェブサイトとの通信で利用
SDWebImage:URLから画像を取得するのに利用

info.plist

必要な機能だけ許可したほうがいいですが、ないとアプリがリジェクトされます。
WKWebViewを使うアプリなら下記の機能は使うかも。
Privacy - Camera Usage Description
↑カメラへのアクセス許可
Privacy - Location When In Use Usage Description
↑位置情報取得のアクセス許可
Privacy - Microphone Usage Description
↑マイクへのアクセス許可
Privacy - Photo Library Usage Description
↑カメラロール内を読み込み
Privacy - Photo Library Additions Usage Description
↑カメラロールに保存
Bundle version string (short)
↑アプリを更新するたびに数値を上げる
1.0->1.1->1.2など

↓参考サイト様
https://neos21.hatenablog.com/entry/2018/06/18/080000

Deployment -> iOS Deployment Target

↑アプリが動作するiOSのバージョンを設定
他のアプリの対応バージョンを見て合わせたほうが良い。

アプリの審査

使用用途がわからないアプリの場合「App Reviewに関する情報」の所に詳細やテスト方法(ログインが必須であればログイン情報)を記載する。

他社のサイトをアプリ内に表示する場合、許可が取れている証明を説明する必要があります。

掲示板などユーザーが自由に書き込めるコンテンツがアプリ内にある場合、第三者が通報できる機能や、速やかに削除ができる対策が取られているかの確認があります。(利用規約必須です)

また、特定の単語(流行り病など)が入ってるとリジェクトされるため全て置き換えるor削除する必要があります。

アプリがクラッシュしたり、見れない画面があると確認が入ります。スクリーンショットは実際に表示されるものが必須(多言語対応している場合、言語ごとにスクリーンショットが必要)

審査通過後

スクリーンショットなど概要欄にある文章も修正もできないため再審査が必要。

審査期間

通常1~2日ほど(朝~昼に審査に出せば次の日の朝には結果が分かりました)

TestFlight

こちらも審査に1~2日ほどかかる。通知のテストが本番と同じ環境でテストできるため(リリース前に確認が可能)

その他

AdMobを使う場合「マーケティングURL」にサイトURLを設定する。

感想

審査チームはアプリの全てをチェックしているとは思えない。(例えば通知部分にバグがあっても通過する)アクセス許可の部分やコンテンツの内容をチェックしているかと思います。

リジェクトされると、英文で何がダメなのか書かれてあるが、Google翻訳で問題なし。添付画像を送ってもらえるパターンもあり。

返信する際には、英文(Google翻訳)と日本語の両方つけて送信しているが、話が通じないなどは今までになかったです。

メタデータの修正であれば、アプリを再度提出する必要はありません。
また修正してないのに審査チームの文面を無視して再申請するとアカウント停止になる可能性があるため必ず返信すること。

通知機能がある場合、年1で証明書の更新が必須(証明書を発行するためにはMacPCが必要になります。)

【CentOS7】PHP5.6からPHP7.4へのアップグレード手順

CentOS7でPHPのバージョンアップするときの方法です。
※CentOS8では、yumコマンドに代わる、dnfコマンドになりますので変更点があれば追記します。

PHP7パッケージがインストールできるEPELをインストール

yum install epel-release

リポジトリの追加

rpm -Uvh http://rpms.famillecollet.com/enterprise/remi-release-7.rpm

リポジトリの確認

ls -l /etc/yum.repos.d

インストールできるPHP一覧が確認できます。
今回はPHP7.4をインストールします。(PHP8は正式リリース版でなかったため)

-rw-r--r--  1 root root  456 Aug 17 19:29 remi-php54.repo	
-rw-r--r--  1 root root 1314 Aug 17 19:29 remi-php70.repo	
-rw-r--r--  1 root root 1314 Aug 17 19:29 remi-php71.repo	
-rw-r--r--  1 root root 1314 Aug 17 19:29 remi-php72.repo	
-rw-r--r--  1 root root 1314 Aug 17 19:29 remi-php73.repo	
-rw-r--r--  1 root root 1314 Aug 17 19:29 remi-php74.repo	
-rw-r--r--  1 root root 1314 Aug 17 19:29 remi-php80.repo

PHPと必要なパッケージも一緒にインストール

yum install --enablerepo=remi,remi-php74 php php-devel php-mbstring php-pdo php-gd php-mysql php-xml php-bcmath

php.confファイルの変更(変更されないこともあるので確認)
Apacheではない場合不要

vi /etc/httpd/conf.d/php.conf
mod_php5.c
↓
mod_php7.c

Webサーバーソフトウェア(Apache/Nginx)を再起動して対応完了です。
再起動をかけるとPHP5.6からPHP7.4に切り替わるのでPHP5.xでしか使えない関数があるとエラーがでるので注意!
WordPressやライブラリなど使用していた場合、事前にテストサーバーで確認したほうがいいです。(プラグインなどエラーがでる可能性有り)

【Laravel】大量INSERTする際に使う関数(chunk)

INSERT時にテーブルのカラム数が異常なほど多い場合やテキストデータのサイズが大きいと下記のエラーが出ます。

<?php
//General error: 1390 Prepared statement contains too many placeholders
?>

調べてみると、Laravelに何回か分けてINSERTできる関数があるそうでそれが「chunk」というものだそうです。

500件ずつデータを追加する場合

<?php
//サンプルの配列は1つですが、$inserts配列に1000個以上あるのと過程します。
$inserts[] = array('id'=>1’,'name'=>'テスト'); 
$insert_data = collect($inserts);
foreach ($insert_data->chunk(500) as $chunk) {
   DB::table('sample')->insert( $chunk->toArray());
}
?>

【CentOS】SSHの不正アクセスをBANするFail2banの設定

SSHからの不正アクセスを監視するFail2banの設定手順になります。

ほぼ海外からの総当たり攻撃なので、随時SSHの接続ログを確認して不正アクセスがないか確認しましょう。
※あまりにも多い場合、契約した先に確認し報告することをおすすめします。

不正アクセスがないかログから確認

less /var/log/secure

Fail2banのインストールと設定手順

yum install fail2ban
vi /etc/fail2ban/fail2ban.local
[Definition]
loglevel = NOTICE
vi /etc/fail2ban/jail.local
# 1時間以内に5回不審なアクセスがあったら1日BAN
bantime  = 86400
findtime  = 3600
maxretry = 5

#CentOS7の場合systemd
backend = systemd

# SSHのアクセスに対する設定
[sshd]
enabled = true
banaction = firewallcmd-ipset
# 起動コマンド
systemctl start fail2ban

# 停止コマンド
systemctl stop fail2ban

# 自動起動を有効
systemctl enable fail2ban

# 自動起動の確認
systemctl is-enabled fail2ban

#現在のBAN状況
fail2ban-client status sshd

参考サイト様

qiita.com

【Laravel】PDO(mysql)を使ったSQL操作

Laravel版のPDOを紹介。

最初は使い方がわからず戸惑いましたが、今はページ送りやGET/POST関連の操作が気軽に実装できて重宝しています。

1件だけデータを取得

<?php
$sample = $DB::table('テーブル名')->where('id',1)->first();
// IDを表示
echo $sample->id;
?>

あいまい検索(sampleという名前がつくものすべてを検索)

<?php
$sample = $DB::table('テーブル名')->where('name','like','%sample%')->first();
// IDを表示
echo $sample->name;
?>

名前がNULLになっている番号を検索

<?php
$sample = $DB::table('テーブル名')->whereNull('name')->first();
// IDを表示
echo $sample->id;
?>

名前がNOT NULLの番号を検索

<?php
$sample = $DB::table('テーブル名')->whereNotNull('name')->first();
// IDを表示
echo $sample->id;
?>

複数のデータを取得

<?php
$samples = $DB::table('テーブル名')->get();
if( isset($samples) && count($samples)>=1){
  // あるだけIDを表示
  foreach( $samples as $row ){
    echo $sample->id;
  }
}
?>

ページ送り付きで検索

<?php
// Contoroller内で定義
// samplesview.bladeというファイルがあることを前提
$limit = 30;
$samples = $DB::table('テーブル名')->paginate($limit);
return view('samplesview',compact('samples'));

// samplesview.blade内で定義
// ページ送りを表示
{{ $samples->render(); }}

//検索したinputデータを引き継ぎしたい場合
{{ $samples->appends('id', @$inputs['id'])->render(); }}
?>

OFFSETとLIMITの指定

<?php
$samples = $DB::table('テーブル名')->offset(0)->limit(5)->get();
if( isset($samples) && count($samples)>=1){
  // あるだけIDを表示
  foreach( $samples as $row ){
    echo $sample->id;
  }
}
?>

データ編集系(トランザクション込み)

<?php
// データの追加
DB::beginTransaction();
try
{
   $DB::table('テーブル名')->insert(array('id'=>1));
   $id = DB::getPdo()->lastInsertId();  //新規追加したIDを取得
   DB::commit();
} catch( \exception $e ) {
   DB::rollback();
}

// データ更新
DB::beginTransaction();
try
{
   $DB::table('テーブル名')->where('id',1)->update(array('name'=>'samplename'));
   DB::commit();
} catch( \exception $e ) {
   DB::rollback();
}

// データ削除
DB::beginTransaction();
try
{
   $DB::table('テーブル名')->where('id',1)->delete();
   DB::commit();
} catch( \exception $e ) {
   DB::rollback();
}
?>