NavigationItemのLeftBarButtonItemsにitemを入れるとBackボタンが表示されなくなるやつの対処
経緯
割と当たり前だったりすることでも、知らないことも多々あるので、今回そんな例として今更知った内容のメモとして記載
内容
UINavigationControllerから pushViewController(UIViewController, animated: Bool)
で次のViewControllerに遷移するのは珍しくない。
しかし、遷移先のViewControllerのUINavigationItemのLeftBarButtonItemsにItemが入っていると、NavigationBarにBackButtonが表示されず、画面を戻ることができない事態に遭遇する。
その解消方法をメモ程度のつもりで記載
本来であれば、このようにBackButtonが表示される。
しかし、下記のような作りをしていると…
VC2に遷移した時BackButtonが出ない。
対処方法
対処は簡単。
StoryboardでUINavigationItemの Left Items Supplement
にチェックをつける。
または、コードで leftItemsSupplementBackButton
を true
にする。
self.navigationItem.leftItemsSupplementBackButton = true
そうすることで、LeftBarButtonItemsとBackButtonが共存するようになる。
2018年の目標
(遅くなりましたが)あけましておめでとうございます
年が明けて早半月程経ち、そろそろ今年の目標を決めておかないと思い、本年1 発目のブログを書いている。
2017年の目標の反省
まず去年(2017年)の反省もしていないので、先にそっちから。 目標は3つ立てていたみたいだけど、途中から忘れてました。
- はてなブログをもう少し細かく書く(目指せ週1ペース) [通年]
これは見事に出来てません。 原因は、怠惰な面が出た結果かなと。記事にしようとメモは毎日のように貯めているものの、それを記事にしようとした時に時間がかかるので、放置してしまっているがため。
2017年の記事数は36件なので、36/52で69.2%の達成具合で、プラスに捉えるなら2週に1回のペースでは書いている。もう一息ってところだろうか。
- 組織からの脱退 [目標: 6月中まで]
これは達成!
時期としては6月中とはいかなかったものの、2017年内には退職して憎っくき組織から脱出成功したので、良かったかなと思います。
- 引っ越し [目標: 物件状態によるが3月中若しくは6月中まで]
これも達成!
思い立ったが吉日で、1月末から探して、2月の頭には物件決めて、引っ越しも2月中に完了した。
2018年の目標
2017年の反省も踏まえつつ、2018年の目標を考える
1. はてなブログを週1ペースを目指して書く [目標: 通年]
去年は達成できていないし、書く習慣付けをしたいところでもあるので、同じ目標を設定
2. 組織からの脱退 [目標: 上半期まで]
これまた、同じ目標。
2017年まで属していた企業は、とにかく業務以外の部分が酷く関わりたくない、いてもろくなことにならないし、薄給すぎる。といった不満で辞めると考えていた。
今回は、そこまでネガティブな話ではない。
iOSエンジニアとして働いているが、スマホ界隈は流れが早く毎年新しい話題が出てくる(特にSwiftやiOSと毎年アップデートされることもあって)。
今所属している企業は、企業体質としては悪くないし、賃金も年相応にはもらっているため大きな不満はない。ただ、業務面ではどうしてもレガシーなままで職業として業界と会社のギャップがどんどん開いていることに耐え難いと感じている。
所属している期間が伸びれば伸びるほど、そのギャップも日増しで、ストレスとして感じしまうため、ギャップの少ない働き方を目指したいと思い、結論として会社を辞めようと考えた。
辞めた際は、フリーランスで希望に近いところで働いていこうと考えている。
3. 引っ越し [目標: 年内]
これまた同じ目標
2017年引っ越して、以下の点で満足していた。
- 部屋が広くなった
- ウォシュレットがついた
- 独立洗面台がついた
- 風呂とトイレが別になった
一方で引っ越して不満として以下のものが出た。
- 隣の部屋で移動販売用の食べ物を仕込むため、Gが自分の部屋に流れ込んでくる(月1はあたりまえ、酷いと特大サイズが2匹同時に)
- 隣の部屋が食べ物を仕込むため、朝4時から動き出し、ドタバタ音を立てて五月蝿い
- 上の階の部屋が深夜1時くらいに帰宅して酷い足音で動き回り五月蝿い
- たまにアパートの住人の車でマフラー改造したのか暴走族並みに五月蝿い車を止める
- スーパーと薬局とコンビニが遠くなり買い物が不便になった
- 引っ越したことでヤマトの再配達がギリギリ間に合う様になった後、再配達時間の見直しにより間に合わなくなった
隣人騒音やGの出現が理由で引っ越してきたはずが、結局改善されないどころか一部悪化している。
家賃自体は前より2万も高くなったのにメリットが薄く、Gと戦うのがきついので出来れば引っ越したいと考えている。
4. LTを行う [目標: 2ヶ月に1回程度]
ブログを書き、外にわずかながら情報発信しはじめたので、次のステップとして人前で話し、伝えることに慣れていこうと考えた。最終的には技術本を書くとかtry SwiftやiOSDCでの登壇を目標としていきたい。
この取り組み自体は去年の10月から始め、今のところ10月と12月に発表はしている。
5. アプリの作成と配信 [目標: 通年]
業務だけではブログやLTのネタは十分なほど貯まらないと感じている。
また、普段アプリを使用していて不満はそれなりに感じたり、もっとこういう機能欲しいと思うことがあるので、ネタ帳に書いている。それらを肥やしにするのはもったいないので、作っていこう(マネタイズも考えているのであわよくばお金稼ぎたい)と考えている。
今のところ想定として、下記アプリで、「1.」ともう1つどれかを作るまでが目標。
6. その他
技術系の目標としては以下。上から順に優先度高めで、必ずしも全部達成しようというわけではなく、自分に必要だと思う部分、興味ある部分を設定しているので努力目標。
iOSアプリのiPhone X対応調査
iOSエンジニアは、iOS開発に力入れているところを好む
iOSプログラマが転職先を選ぶときに、候補の会社が出してるアプリのiPhone X対応が速かったかどうかなども判断基準になりそうだなと思いました。
— 所 友太 / ToKoRo Yuta (@tokorom) 2017年12月6日
(フットワーク軽いチームがお好みか、慎重に進めるチームがお好みか)
iPhone X対応遅い会社を好む人って存在するのかな( ´・?・`)
— 🐶 mono (@_mono) 2017年12月6日
SwiftよりObjective-Cを好む人とかならいそうだけど( ´・‿・`) https://t.co/oxzyAWulWO
Twitterではないけど、akatsuki174さんのLTでも
"iOSアプリ開発に力入れていないのかな…と思ってしまう"
とある。
iPhone X対応 ~Safe Areaの外側~ // Speaker Deck
等、転職時の会社選びにも少なからずマイナスなイメージがつくことも…。
iPhone X対応いつした?
じゃあ、iOS界隈で有名な会社、アプリはiPhone X対応どのくらいでやってるのだろうか?と気になったので調べて見た。
iPhone X発売が2017年11月03日で、発売前からシミュレータでデバッグもできたので、対応する期間としては3ヶ月近くあったと思う。これだけあれば、対応終わっていてもいいはずと思っている。
調査するアプリの選考基準はひとまず、下記としている。
各アプリとiPhone X対応した日付と実機での確認
表の説明
- 調査日は2017/12/23〜12/24にかけてで、その間にアップデートがあったアプリは漏れている可能性がある
- 対象アプリは、 try Swift 及び iOSDC のスポンサーのアプリと有名どころのアプリ (但し、ゲーム以外)
- 企業からリリースされているアプリの中でベストセラーと他有名そうなアプリにフォーカス
- サービス自体は社内で、アプリは外注のものも混じっていると思うが判別つかないのでそのまま記載
- アップデート内容で "iPhone X対応" またはそれに類する言葉があれば、その日付を対応日としている
- アップデート内容で "iOS 11対応" またはそれに類する言葉があれば、その日付を対応日としている
- 複数対応日が存在する場合、直近の日付を対応日としている
- アップデート内容から対応した日がわからないものは、 "-" としている
- 実機確認は起動して数画面確認した程度
<スポンサー企業1>
企 業 | アプリ名 | iPhone X 対応日 |
iOS 11 対応日 |
最終Update日 | iPhone X対応実機確認 ○:対応済 △:SafeArea対応漏れあり ×未対応 |
---|---|---|---|---|---|
LINE | LINE | 2017/12/04 | - | 2017/12/18 | ○ |
LINE Creators Studio | - | 2017/10/23 | 2017/12/11 | ○ | |
LINE BLOG | - | 2017/09/27 | 2017/12/11 | × | |
YAHOO JAPAN | Yahoo!JAPAN | - | 2017/09/19 | 2017/12/11 | ○ |
Yahoo!乗換案内 | 2017/11/01 | 2017/10/10 | 2017/12/14 | ○ | |
ヤフオク! | 2017/11/06 | 2017/09/19 | 2017/12/11 | ○ | |
PassMarket | 2017/11/02 | - | 2017/11/02 | ○ | |
mercari | メルカリ | - | - | 2017/12/20 | ○ |
メルカリ アッテ | 2017/12/01 | - | 2017/12/18 | ○ | |
メルカリ カウル | 2017/11/01 | 2017/11/01 | 2017/12/21 | ○ | |
Cyber Agent | Ameba | 2017/10/23 | - | 2017/12/19 | ○ |
ハコニワタイマー | - | - | 2017/10/26 | △ | |
AbemaTV | AbemaTV | 2017/11/23 | - | 2017/12/18 | ○ |
AWA | AWA | 2017/11/02 | 2017/09/19 | 2017/12/20 | ○ |
cookpad | クックパッド | 2017/12/21 | - | 2017/12/21 | ○ |
みんなのお弁当 | - | 2017/09/28 | 2017/10/05 | × | |
VASILY | IQON | - | - | 2017/11/20 | × |
ookami | Player! | 2017/11/02 | 2017/11/02 | 2017/12/22 | ○ |
リクルートライフスタイル | ホットペッパー | - | - | 2017/12/19 | △ |
リクルートマーケティングパートナーズ | ゼクシィ | - | - | 2017/12/20 | × |
LIFULL | SUUMO | 2017/10/31 | 2017/09/18 | 2017/12/21 | ○ |
Money Forward | マネーフォワード | - | - | 2017/11/30 | ○ |
MFクラウド経費 | - | - | 2017/12/14 | ○ | |
MFクラウド会計 | - | - | 2017/04/13 | × | |
freee | freee | - | - | 2017/12/18 | ○ |
GameWith | シャドバ攻略forシャドウバース | - | - | 2017/11/10 | × |
パズドラ 攻略 & マルチ掲示板 | - | - | 2017/11/13 | × | |
DeNA | マンガボックス | 2017/11/10 | 2017/09/19 | 2017/12/21 | ○ |
ハッカドール | 2017/11/14 | - | 2017/12/13 | △ | |
HANDS LAB | ハンズクラブアプリ | - | - | 2017/09/19 | × |
SHOWROOM | SHOWROOM | - | 2017/09/19 | 2017/10/23 | × |
FURYU | ピクトリンク | 2017/11/01 | - | 2017/12/20 | ○ |
curet | - | - | 2017/11/21 | × | |
HARUHARU | - | - | 2017/12/21 | △ | |
GMOペパボ | minne | - | 2017/09/20 | 2017/12/14 | △ |
PicApp | DMM TELLER | - | - | 2017/12/23 | ○ |
CHIPS | 2017/11/07 | - | 2017/12/21 | ○ | |
MAMORIO | MAMORIO | - | 2017/09/29 | 2017/12/18 | ○ |
Hatena | はてなブログ | 2017/12/12 | - | 2017/12/12 | ○ |
はてなブックマーク | 2017/11/02 | 2017/11/27 | 2017/12/21 | ○ | |
B!KUMA | - | - | 2015/10/19 | × | |
sansan | Sansan | 2017/11/13 | - | 2017/12/21 | ○ |
Eight | 2017/10/30 | - | 2017/12/14 | ○ | |
JET BRAINS | YouTrack | 2017/11/14 | - | 2017/11/14 | ○ |
KotlinConf | - | - | 2017/11/03 | × | |
eureka | Couples | - | - | 2017/09/27 | × |
Pairs | - | 2017/10/23 | 2017/12/20 | △ |
<スポンサー企業2>
企 業 | アプリ名 | iPhone X 対応日 |
iOS 11 対応日 |
最終Update日 | iPhone X対応実機確認 ○:対応済 △:SafeArea対応漏れあり ×未対応 |
---|---|---|---|---|---|
chatwork | チャットワーク | 2017/12/13 | 2017/09/19 | 2017/12/13 | ○ |
MEDLEY | CLINICS | 2017/11/30 | 2017/10/03 | 2017/12/18 | ○ |
FRIL | フリル(FRIL) | 2017/12/11 | 2017/12/11 | 2017/12/11 | ○ |
asken | あすけんダイエット | - | 2017/09/23 | 2017/12/19 | ○ |
Kibousoft | KnzkApp | - | - | 2017/12/05 | × |
dip | バイトル | - | 2017/10/12 | 2017/12/20 | ○ |
はらこねっと | - | - | 2017/08/30 | × | |
Wondershake | LOCARI(ロカリ) | - | - | 2017/12/07 | × |
Creon(クレオン) | - | - | 2017/11/21 | △ | |
NIKKEI | 日本経済新聞 電子版 | - | - | 2017/12/22 | ○ |
日本経済新聞 紙面ビューアー | 2017/11/14 | - | 2017/12/18 | ○ | |
PAY ID(BASE .inc) | BASE | 2017/10/30 | - | 2017/12/20 | ○ |
PAY ID | - | - | 2017/10/13 | × | |
FOWD | Balloon | - | - | 2017/11/21 | × |
Retty | Retty | - | - | 2017/12/15 | ○ |
Goodpatch | Prott | 2017/11/01 | - | 2017/11/14 | ○ |
Balto | 2017/10/31 | - | 2017/11/03 | ○ | |
Wantedly | Wantedly People | 2017/11/03 | 2017/10/23 | 2017/12/19 | △ |
Wantedly Visit | - | 2017/10/01 | 2017/11/23 | × | |
ORIGAMI | Origami | - | 2017/09/20 | 2017/12/07 | ○ |
pixiv | pixivコミック | 2017/11/20 | 2017/09/19 | 2017/12/12 | ○ |
pixiv | - | - | 2017/12/22 | ○ | |
Pawoo for Mastdon | - | - | 2017/11/09 | ○ |
<他有名アプリや著名なiOSエンジニアが関わっているアプリ>
企 業 | アプリ名 | iPhone X 対応日 |
iOS 11 対応日 |
最終Update日 | iPhone X対応実機確認 ○:対応済 △:SafeArea対応漏れあり ×未対応 |
---|---|---|---|---|---|
Spotify | Spotify | 2017/11/17 | - | 2017/11/17 | ○ |
START TODAY | WEAR | 2017/12/07 | - | 2017/12/18 | ○ |
ZOZOTOWN | - | - | 2017/11/20 | × | |
UNIQLO | UNIQLOアプリ | - | - | 2017/12/21 | × |
Vikona | JOIN US | - | - | 2017/12/19 | ○ |
Coincheck | Coincheck | 2017/11/09 | - | 2017/12/15 | ○ |
bitFlyer | bitFlyer | - | 2017/10/05 | 2017/12/21 | ○ |
AMZN Mobile | Amazon | - | - | 2017/11/15 | ○ |
Amazon プライム・ビデオ | - | - | 2017/12/20 | ○ | |
Kindle | - | - | 2017/12/01 | × | |
2017/10/23 | 2017/09/20 | 2017/12/17 | ○ | ||
- | - | 2017/12/15 | ○ | ||
Google アプリ | 2017/11/14 | - | 2017/12/15 | ○ | |
Gmail | - | - | 2017/12/19 | ○ | |
Chrome | - | 2017/10/27 | 2017/12/06 | ○ | |
Google マップ | 2017/12/01 | - | 2017/12/14 | ○ | |
YouTube | - | - | 2017/12/07 | ○ | |
Nintendo | Nintendo Switch Online | 2017/11/27 | - | 2017/12/06 | ○ |
みまもりSwitch | 2017/10/14 | 2017/09/25 | 2017/10/14 | ○ | |
McDonald's | マクドナルド | - | - | 2017/12/07 | × |
DMM.com | DMMぱちタウン | - | - | 2017/12/22 | × |
DMMブックス | - | - | 2017/11/30 | × | |
DMM mobile | - | - | 2017/12/18 | ○ | |
Hammer&Chisel | Discord | 2017/11/02 | 2017/10/04 | 2017/12/09 | ○ |
Slack Technologies | Slack | 2017/12/15 | 2017/09/29 | 2017/12/15 | ○ |
BrightTable | ペコッター | - | - | 2017/12/22 | × |
mixi | mixi | 2017/12/04 | - | 2017/12/08 | ○ |
minimo | - | - | 2017/12/12 | ○ | |
- | - | 2017/12/20 | ○ | ||
SNOW | SNOW | - | 2017/10/18 | 2017/11/28 | × |
Studyplus | Studyplus | 2017/11/09 | 2017/09/30 | 2017/12/18 | ○ |
Timers | Pairy | - | - | 2017/07/24 | × |
Famm | - | - | 2017/12/18 | ○ | |
Zaim | 家計簿Zaim | 2017/10/17 | - | 2017/12/12 | ○ |
ibis | アイビスペイントX | 2017/11/02 | - | 2017/11/29 | ○ |
Graffity | Graffity | - | - | 2017/12/14 | △ |
FiNC | FiNC | - | - | 2017/12/20 | ○ |
Tabely | タベリー | - | - | 2017/12/21 | ○ |
Cluex | ままのて | - | - | 2017/12/06 | ○ |
まとめ
- 同一企業でも、プロジェクトによって温度差やタスクの優先度で対応/非対応が分かれる
- iPhone X未対応しかない企業は論外だが、SafeArea対応しきれてない等あってもiPhone Xに対応した企業は、iOSエンジニアにとってやりがいのあるところだと思うので良さそう
- スポンサーになっているのに、iPhone X対応していない企業は、iOS開発に理解があるのか疑問。(単に人手の問題とかもあるだろうけど)
アップデート内容が企業によってまちまちなので、手作業で調査しており、完全に信頼できるデータではないので、あくまで目安として見ていただければと思います。
CoinCheckで取引を始める前から凍結された話 (追記:2017/12/28)
bitFlyerだけでは足りぬ
仮想通貨がバブルのように高騰してるということで、いっちょ参戦してみようとbitFlyerで取引をしていたのだが、いかんせん対応しているアルトコインの種類が少なくて手を出したいコインを取り扱っていない問題の直面
ならばと調べてみたら、国内の仮想通貨取引所ではCoinCheckというところが1番アルトコインを扱っているらしい。
CoinCheckに申し込み
体感として仮想通貨はいつ何時上がるか予測しにくいので、時間との勝負だなと思い、早急にCoinCheckのアプリをDLして、会員登録、本人確認書類の提出を行なった。
本人確認書類の提出には、下記の3つをWeb上から提出する必要がある。
- 身分証を持っている自撮り
- 身分証の表面
- 身分証の裏面
昼休憩中にパパーッと提出は完了した。あとは、承認待ちである。承認には1〜2日かかると記載があったので、とりあえず待つのみ。
突然の死!(凍結
本人確認書類を提出した翌日、CoinCheckのアプリを何気なく起動したら、突然「アカウントが凍結されたため、ご使用のアカウントでのログインは出来なくなりました。」のような表示が出た。
何も凍結される身に覚えがないので、メールを確認したところ下記メールがきていた。
なんの前触れもなく凍結されてご理解お願いされても無理がある。
さすがに納得いかなかったが、「詳細に関しては開示しておりません」と書いているあたり、何を聞いても詳細は開示できませんのテンプレメールが返ってくるのが目に見えている。
ただ納得いかない以上はダメ元でこのメールに返信をしてみた。以下自分の返信とそれに対する反応。
不可解すぎるCoinCheck
OK、非承認になったのはわかった。ただ、非承認になる理由が皆目検討もつかない。
ケース1 金銭面
- 過去に支払いを延滞させたことない
- 現時点でクレカを使っているので、それなりの信用はある
- 会社員として働いているので収入面も問題ない
- 同業他社のbitFlyerで取引実績もある
これらから金銭面では全く問題ないはずである。
ケース2 身分証
- 本人確認書類として免許証を使用
- 提出した画像はiPhone Xで撮影
身分証としての書類も画像の画質も問題ないはずである。
ケース3 各種重要事項
ここらへんチェック項目多く、正直一切読まずに同意にチェックをつけた。
非承認の理由があるとしたらここかもしれないが、読まない人が多いこの手のもので一々落としていたら、もっと凍結されたという人が居てもよさそうなのに見当たらない。なので、違うかな?と思っている。(今後コインチェックを利用する予定の人は念のためちゃんと読むことを推奨します。)
ネットで自分と同じように本人確認書類の承認で凍結された人がいないか確認したところいた。
ただ、この人は本人確認のところで不備があり2回非承認の後、3回目の非承認で凍結されている。
私の場合、何もなく1発凍結されている。マジで意味わからない。審査が厳しくなって1発非承認で凍結とかにでも変えたのだろうか?
そもそも非承認になった時点でアカウントを凍結させる意味も不明。そして承認の詳細開示はしていないと予防線を貼っているあたり、完全に闇しかない。
最終的結論
CoinCheck自体は国内でビットコインの取引No.1の仮想通貨最大手ではあるが、手数料も国内No.1の高さだのサポートが悪いだの色々と調べると評判もよろしくなかった。個人的主観で言わせてもらうと、今回の凍結で殿様商売って感じの印象しかなく最悪。
色々内部事情詳しい人から話も聞こうかと思ってたが、CoinCheckで取引できるようになっても、もう使いたいと思えなかったので時間の無駄だと思い止めた。
今回の救いは、まだ入金をしていなかった点につきる。入金していて凍結された場合、全額没収されるので、CoinCheckに搾取どころかカツアゲ状態になっていたかもしれない。
"Coin Check 凍結"で調べると、前触れもなく凍結された人がチラホラいるらしく、結構信用ならない取引所だとわかる。既に利用している人は気をつけた方がいいかもしれない。
コメント頂いたのでそれに対する考察(追記: 2017/12/28)
北の人なの?さんからのコメント
在日北朝鮮人はダメらしいですよ CCはテロ支援しないしっかりした企業ということですね
少なくとも祖父母両親含め日本人ですし、姓も名もTop10に入るくらいのありきたりなもの、さらには日本国籍でパスポートも取得しているので在日ではないと思います。
昔、朝鮮顔だねって誰かに言われたことはあるので、見た目そう見える部分はあるかもしれません。そうなると、免許証の写真だけで朝鮮人判定しており、CoinCheckは真っ当に調査をしていない杜撰な会社ということになると思います。
国内No.1取引量を謳う会社がそんな杜撰じゃないと思いますので、この線はないでしょう。
名無しさんからのコメント
利用規約から登録拒否の要件は次の通りになります。
(1) 当社に提供された登録情報の全部又は一部につき虚偽、誤記又は記載漏れがあった場合
(2) 未成年者、成年被後見人、被保佐人又は被補助人のいずれかであり、法定代理人、後見人、保佐 人又は補助人の同意等を得ていなかった場合
(3) 反社会的勢力等(暴力団、暴力団員、右翼団体、反社会的勢力、その他これに準ずる者を意味し ます。以下同じ。)である、又は資金提供その他を通じて反社会的勢力等の維持、運営若しくは経営 に協力若しくは関与する等反社会的勢力等との何らかの交流若しくは関与を行っていると当社が 判断した場合
(4) 他の仮想通貨交換業者等の役職員である場合(当社が認めた場合を除きます。)
(5) 仮想通貨交換業を営んでいる又は営む予定の法人である場合(当社が認めた場合を除きます。)
(6) その他、当社が登録を適当でないと判断した場合
具体的にはこんなのが怪しいと思います。
・他取引所の関係者と思われている
・コインチェックの口座開設のアフィをスパムや悪用していた
・コインチェックが収集した反社会的勢力のリストと一致した
・または同姓同名で年が近い反社勢力がリストに載っていた
・同姓同名の人が逮捕されている
生年月日まで蓄積した反社情報を大量に持っているのは警察くらいのはずなので 新聞発表などの生年月日が不明なリストに基づいて拒否(同姓同名で年齢が同じだから念の為拒否)されていたのなら、いい迷惑ですね
具体例まで出していただきありがとうございます。
他取引所の関係者と思われている
-> 私自身ほか取引所の関係者ではないですが、関係者と思われる要素があるとしたら、TwitterでbitFlyerのことを呟いていることですかね…他思い当たる節はないですし、確証得難いので難しいところです。コインチェックの口座開設のアフィをスパムや悪用していた
-> コインチェックのアフィがあること自体知りませんでした。なので、この線はないでしょう。コインチェックが収集した反社会的勢力のリストと一致した
-> 所属している会社は一応上場会社なので、まず反社会的勢力とみなすのは無理でしょうから、この線もないですね。または同姓同名で年が近い反社勢力がリストに載っていた
- 同姓同名の人が逮捕されている
-> これ、ないだろうと思って検索したら、ありきたりな名前のせいか同姓同名かつ割と年近い人が逮捕されたり反社勢力の人がいました。
どうやらこれが1番濃厚っぽいです。
マジで迷惑な話ですけど、年齢計算とか厳密に行なってチェックしていれば、別人とわかるはずなので、多忙なためか厳密なチェックは行われていない感じですね。
ざっとチェックして疑わしきは凍結せよといった感じなんでしょうか?
案外この線で1度問い合わせを行えば、凍結解除もわずかながら可能性あるかもしれません。ただ、今回の件で不審感もあるため、気が向くことあれば問い合わせようかと思っています。(今の所問い合わせる気はない。)
NSPredicateを使うと@を全角半角区別してくれない
emailのvalidationメソッド
業務中、emailのvalidationメソッドをいじることになって知った話
下記のようなコードでemailのvalidationチェックを正規表現を行なっていたのだが、 @
が全角でも true
が返ってきてしまうことが発覚した。(emailの正規表現に関しては正確ではないので、そこは雰囲気で)
func isValidEmail(string: String) -> Bool { let emailReg = "[A-Za-z0-9._%+-]+[A-Za-z0-9]+@[A-Za-z0-9]+[A-Za-z0-9.-]+\.[A-Za-z]{2,6}" let predicateMail = NSPredicate(format:"SELF MATCHES %@", emailReg) return predicateMail.evaluate(with: string) }
Androidでは全角半角区別されていた
同じプロジェクトのAndroid側では似た処理を行なっていたが、 @
が半角の時のみvalidとして扱われていたので、その振る舞いに疑問を覚え、Discord上のios-developers-japanコミュニティに質問投げた。
NSPredicate
使ってることもあって、iOSでもmacOSでももはや @
は全角半角区別されない仕様なのかと思っていた。
SwiftならNSRegularExpressionがある
そもそも NSPredicate
を前任が使って書いていたり、自分がiOS上で正規表現を使ったことなくて知識が乏しく気づけなかったのだが、NSRegularExpression
クラスというのがあるのを知らなかった。(見たことある気もするけど、覚えてない)
んでこいつを使えば、下記のように判定はできるということを教えてもらった。
// loveeさんから提示のコード let stringA = "123@456" let stringB = "123@456" let rangeA = stringA.range(of: "@[0-9]", options: .regularExpression, range: nil, locale: nil) //.some let rangeB = stringB.range(of: "@[0-9]", options: .regularExpression, range: nil, locale: nil) //nil
// omochimetaruさんから提示のコード func isValidEmailFormat2(string: String) -> Bool { let emailReg = "[a-zA-Z0-9._%+-/:~$^()&!']+@[A-Za-z0-9.-]+\\.[A-Za-z]{2,4}" // valid regexp let regexp = try! NSRegularExpression.init(pattern: emailReg, options: []) let nsString = string as NSString let matchRet = regexp.firstMatch(in: string, options: [], range: NSRange.init(location: 0, length: nsString.length)) return matchRet != nil }
また、NSPredicate
よりNSRegularExpression
の方が標準的だろうというお話も出た。
最終的には…
NSRegularExpression
を使えば、@
の全角半角の判別を正常にできるのがわかったわけだが、諸事情(時間的と引き継いだコードで振る舞いを変えづらい)により、文字列がascii文字かの判定を別途足し方式でvalidationを行なった。
var email1 = "hoge@gmail.com" email1.canBeConverted(to: .ascii) // true var email2 = "hoge@gmail.com" email2.canBeConverted(to: .ascii) // false