Author Archives: makotton

リジェクト対策サービスの提供を開始しました


株式会社プライムセオリーではiOSアプリ開発コンサルティングを展開しています。

iOSアプリ申請代行 & iOSアプリ開発コンサルティング
https://submitapp.info/

その中のメニューの一つ、従来からご好評いただいている「リジェクト対応」に加え、新たに「リジェクト対策」のプランを開始いたしました。前者がリジェクトされた後の対策をサポートする内容に対し、後者は企画/仕様策定中や開発中、審査提出直前にリジェクトの可能性が浮上した場合にリジェクトを回避するための対策を行う内容になります。

ガイドライン抵触の懸念がある、開発中にリジェクトの可能性が浮上してきた、リジェクト回避のためにソースコードに手をいれるべきなのかそのままでも問題ないのかなど、審査提出前にリジェクトの可能性を排除するための対策を行います。App Store Review Guidelinesとアプリの仕様/使用技術などを突き合わせ、審査員にアピールするための文章や補足資料の作成、動画の準備、必要に応じてソースコードの変更などの対策案を提示いたします。

なお、このプランは審査提出までの対応となりますが、万が一リジェクトされた場合の「リジェクト対応」をセットで承ることも可能です(セットの場合は後日リジェクト対応をご用命いただくよりお安くなります)。

株式会社プライムセオリーが保有する豊富なリジェクト対策ノウハウと高い実績(弊社リジェクト対応による審査通過率 92.8% (2017/03/15現在))が問題解決に導きます。

ぜひ、ご相談、ご用命ください。

株式会社プライムセオリー
https://www.primetheory.jp/


iOSアプリ申請代行とApple Developer Program登録代行の対応範囲を拡大しました


株式会社プライムセオリーではiOSアプリ申請代行やApple Developer Program登録代行、商談同行サービスや技術顧問サービスなどの「iOSアプリ開発コンサルティング」サービスを展開しております。

iOSアプリ開発コンサルティング
https://submitapp.info/

従来のiOS申請代行やApple Developer Program登録代行に加え、ご要望の多かったVolume Purchase ProgramによるCustomB2Bアプリの申請代行とApple Developer Enterprise ProgramおよびiOS Developer University Programの登録代行も開始しております。この二つは情報が少なく、苦労する方も多いと思われ、弊社への相談件数も以前から多くありました。

アカウント登録や申請に関しての情報はネットからも収集できますが、信憑性に欠けるものや正しくても情報が古かったり様々なケースがあります。開発と異なり通常は何度も経験することではありませんし、場合によっては最初で最後かもしれないような専門的な作業になります。そこに時間も労力もつぎ込むのは得策ではありません。開発会社であってもアプリ専業でなければ路頭に迷うこともあるでしょう。

専業兼業含めアプリを受託開発している会社はたくさんありますが、この規模でここまで対応できる開発会社はそう多くないと思います。アプリ申請代行やアプリ開発コンサルティングなどアプリ開発の周辺サポートに関してはアプリ開発会社の中でも抜きん出ていると自負しております。

イレギュラーなことが多く発生するのがアプリ申請やデベロッパー登録です。このブログにもヒントはたくさんありますが、そこに書かれていないケースもたくさんありますので、路頭に迷う前にぜひ一度ご相談いただけると幸いです。

株式会社プライムセオリー
https://www.primetheory.jp/


UITextFieldのinputViewにUIPickerViewを設定し、ピッカー以外からの入力を受け付けないようにする方法


UITextFieldのinputViewにUIPickerViewを設定した状態でUITextFieldをリードオンリーにするとイベントを受け付けなくなってしまいピッカーが表示されません。テキストフィールドに対してピッカー以外からの入力を受け付けないようしたい場合はUITextFieldDelegateの

optional public func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool

を利用します。

func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool {
    return false
}

これで、UITextFieldをリードオンリーにしなくてもタップイベントを認識し、ピッカー以外からの入力を受け付けないようになりました。

キーボードあるいはピッカーからの入力を受け付けるテキストフィールドがある場合は、テキストフィールドにtagを設定し、パラメータのtextFieldのtagを調べて除外しましょう。


[access] This app has crashed because it attempted to access privacy-sensitive data without a usage description. The app’s Info.plist must contain an NSPhotoLibraryUsageDescription key with a string value explaining to the user how the app uses this data.


[access] This app has crashed because it attempted to access privacy-sensitive data without a usage description. The app’s Info.plist must contain an NSPhotoLibraryUsageDescription key with a string value explaining to the user how the app uses this data.

iOS9.xで開発したプロジェクトをiOS10対応にする際、上記のエラーが出ました。フォトライブラリにアクセスしたタイミングでコケました。デバイスやセンシティブな情報にアクセスする際にユーザに確認を求めなければならないという決まりがありましたが、iOS10ではこれらのアクセス方法が変更になっています。

詳しくは、Information Property List Key Reference

今回の場合はフォトライブラリですので、エラーメッセージの指示通り、

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
	・・・
	<key>NSPhotoLibraryUsageDescription</key>
	<string>ここで選択した画像をアバターとして使用します</string>
	・・・
</dict>
</plist>

このように、Info.plistにキーと目的を設定すればOKです。ソースコード側の変更は不要です。


Nil is not compatible with expected argument type ‘UnsafePointer


Nil is not compatible with expected argument type ‘UnsafePointer

iOS9.x対応プロジェクトファイルをiOS10SDKでビルドした際にエラーになりました。

let path: CGMutablePath = CGMutablePath()
CGPathMoveToPoint(path, nil, 0, self.frame.size.height)
CGPathAddLineToPoint(path, nil, self.frame.size.width, self.frame.size.height)

CGMutablePath API リファレンス
CGMutablePath.xxxxxxxxメソッドを使え、とのことです。上記の例だと、

let path: CGMutablePath = CGMutablePath()
path.move(to: CGPoint(x: 0, y: self.frame.size.height))
path.addLine(to: CGPoint(x: self.frame.size.width, y: self.frame.size.height))

このように書き換えることで対応できました。


CakePHPで通常のPHPを動作させたい場合の設定


あたりまえですが、通常に配置したPHPファイルはCakePHPのルーティングに引っかかって意図した動作をしません。いつも忘れるので備忘録。

# vi app/.htaccess

appディレクトリ直下の.htaccessを開き、

RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_URI} ^/targetfile
RewriteRule ^.*$ – [L]

上記の内容を、

<IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteBase    /
    RewriteCond    %{REQUEST_URI} ^/targetfile
    RewriteRule    ^.*$ - [L]

    RewriteEngine On
    RewriteRule    ^$    webroot/    [L]
    RewriteRule    (.*) webroot/$1    [L]
</IfModule>

このように、もとのRewriteRuleの前に挿入します。これで問題なくアクセス可能になります。なお、targetfileが対象のPHPファイル名ですので、ご自分の環境置き換えてください。


UINavigationBarのBackボタンをUIBarButtonItemでカスタマイズするとエッジスワイプジェスチャーが効かなくなる件の対処(Swift)


UINavigationBarのBackボタンに対してUIBarButtonItemを用いて独自に設定を行うとエッジスワイプジェスチャーが効かなくなりますが、以下の方法で有効にできます。

FirstViewController(遷移元)からSecondViewController(遷移先)をpush、SecondViewControllerにBackボタンがある構造を前提として、

class SecondViewController: UIViewController, UIGestureRecognizerDelegate {
	・・・
	override func viewDidLoad() {
	     super.viewDidLoad()
		・・・    
         self.navigationController.interactivePopGestureRecognizer.delegate = self        
		・・・    
	}
	・・・    
}

SecondViewControllerにデリゲートとしてUIGestureRecognizerDelegateを設定、viewDidLoadあたりでデリゲートインスタンスを設定します。これでOKです。


iOSシミュレータでLaunch Image(スプラッシュ画像)が反映されない場合の対処


XcodeにてLaunch Images Sourceの再設定、Launch Screen Fileの指定(あるいは指定なし)、アプリを削除してから再度ビルド→転送….これらの作業も行っても、どうしてもiOSシミュレータでLaunch Imageが表示されない、あるいは、以前のままになってしまう場合があります。そのようなときは、iOSシミュレータをリセットしてしまいましょう。


iOSシミュレータの[Simulator]->[Rest Content and Settings…]を選択し、

確認ダイアログにて[Reset]ボタンを押下し(転送済みのアプリが多い場合は少々時間がかかります)、リセットされたらビルド→転送。これでLaunch Imageは問題なく表示されるかと思います。


CakePHP3+MySQLにてConnection to database could not be established: SQLSTATE[HY000]: General error: 1298 Unknown or incorrect time zone: ‘****’


config/app.phpにてtimezoneを’Asia/Tokyo’に設定したところ、

Connection to database could not be established: SQLSTATE[HY000]: General error: 1298 Unknown or incorrect time zone: ‘Asia/Tokyo’

になりました。


CakePHP3の初期画面ではこの状態です。

MySQLコマンドラインからタイムゾーンテーブルを確認したところ、

mysql> select * from mysql.time_zone;
Empty set (0.00 sec)

ありません。

$ mysql_tzinfo_to_sql /usr/share/zoneinfo/ | mysql -u root mysql -p******

mysql_tzinfo_to_sqlを用いてタイムゾーンテーブルをロードします。


これでOKになりました。


月額10万円からiOSアプリ開発が可能なサービス

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので十分ご注意ください。

月額10万円からiOSアプリ開発が可能なサービスを6/15より提供開始します。

請負契約ではなく月額課金の準委任契約にすることで、小さくはじめることでリスクを減らし、ゴールを決めておかないことで撤退もしやすくしました。一度にたくさんの予算を確保できない、プロジェクトを継続するか判断できない、専任を採用することまではできないけど専属のアプリ開発者を確保したい、などのご要望にマッチします。

詳細は以下をご覧ください。



月額10万円からのiOSアプリ開発
https://iphoneappdev.info/

発注者にも受注者にも優しい開発を提供いたします。ぜひご用命ください。