iOSアプリ申請時に最低限必要な画像

前に用意したことあったけど全然覚えてないしよくわからなかったので次回用に最低限準備しないとならない画像をメモ。

スプラッシュ画像

3125x5571を1枚用意。

これ1枚用意して、LaunchScreen.storyboardのViewControllerにUIImageViewを貼り付けてAutolayoutを上下左右0に設定したらどの端末でも綺麗になった。
この辺あまりわかってないけどとりあえずこれで。
ただ、これは画像じゃなくてもViewControllerなので自分で作れば不要かな。

アプリアイコン

1024x1024を1枚用意。

これを元にリサイズツール等で以下のサイズを準備してAssets.xcassetsにドラッグ&ドロップ。
20x20
29x29
40x40
58x58
60x60
76x76
80x80
87x87
120x120
152x152
167x167
180x180

ItunesConnectにアップするAppアイコンもこれで。

Appプレビューとスクリーンショット

iPhoneiPadとでそれぞれ1番大きい端末のものを最低1枚用意すればいいぽい。
iPhone : 1242x2208
iPad : 2048x2732

単純にキャプチャでよければシュミレータのスクショ撮影機能を使えばok
間違ってたらごめんなさい、教えてください。以上です。

【android】ActionBarでのSearchViewの基本的な使い方

はじめに

今回やりたかったことは、ActionBarに検索バーをおいて検索すると検索用の画面へ遷移するということ。
最終的にやりたいことは検索バーで検索結果画面を開くところだけど、今回は検索バーをおいてイベントをハンドリングするところまで。

f:id:yoppy0066:20170208150335g:plain:w250

検索バーをおく

まずは画面遷移とかは考えずにとりあえず検索バーをおくだけ。

res/menu/main.xml

<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android"
      xmlns:app="http://schemas.android.com/apk/res-auto">
  <item
      android:id="@+id/search_menu_search_view"
      app:actionViewClass="android.support.v7.widget.SearchView"
      app:showAsAction="always" />
</menu>

MainActivity.java

public class MainActivity extends AppCompatActivity {

    SearchView mSearchView;

    ・・・

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        super.onCreateOptionsMenu(menu);

        // 検索バーを追加(必須)
        getMenuInflater().inflate(R.menu.main, menu);

        // 文字色、サイズの変更とプレースホルダーセット(任意)
        SearchView.SearchAutoComplete searchAutoComplete = (SearchView.SearchAutoComplete)
            mSearchView.findViewById(android.support.v7.appcompat.R.id.search_src_text);
        searchAutoComplete.setHintTextColor(Color.rgb(0xff, 0xff, 0xff));
        searchAutoComplete.setTextSize(25);
        searchAutoComplete.setHint("検索キーワード");

        return true;
    }
}

検索ボタンのイベントをハンドリング

次に検索された時のイベントをハンドリング
MainActivityでSearchFragment.SearchFragmentListenerをimplementsして、SearchView.OnQueryTextListenerを実装すればok。

MainActivity.java

public class MainActivity extends AppCompatActivity implements SearchFragment.SearchFragmentListener {
    ・・・

    @Override
        public boolean onCreateOptionsMenu(Menu menu) {
        super.onCreateOptionsMenu(menu);
        getMenuInflater().inflate(R.menu.main, menu);

        // ★  追加
        MenuItem menuItem = menu.findItem(R.id.search_menu_search_view);
        mSearchView = (SearchView) menuItem.getActionView();
        mSearchView.setOnQueryTextListener(this.onQueryTextListener);
    }

    // ★ 追加
    private SearchView.OnQueryTextListener onQueryTextListener = new SearchView.OnQueryTextListener() {
        @Override
        public boolean onQueryTextSubmit(String searchWord) {
            // ★ 検索ボタンでここが呼ばれる
            return true;
        }

        @Override
        public boolean onQueryTextChange(String newText) {
            return false;
        }
    };
}

以上です

【xcode】AppIconにiPadのエリアがなかった時の対応

またたいした話じゃないけど、アプリの開発をひととおり行ってアプリのアイコンを設定しようとしたらiPad用のエリアがなかった。

iPhoneのみ
f:id:yoppy0066:20170207131426p:plain

iPhoneiPad両方あり
f:id:yoppy0066:20170207131455p:plain

理由はプロジェクトを作った時にDevicesをiPhoneを選択して作ったから。
あとからUniversalに変更したのでなかったので手動で追加した。

Assets.xcassetsをFinderで開くとAppIcon.appiconsetフォルダがあってこの中にContents.jsonがあるのでそれを編集。
iPhoneの設定の下にiPad用の設定を追加すればいけた

Contents.jsonに以下を追加

Contents.jsonに以下を追加

    {
        "idiom" : "ipad",
        "size" : "20x20",
        "scale" : "1x"
    },
{
    "idiom" : "ipad",
    "size" : "20x20",
    "scale" : "2x"
},
{
    "idiom" : "ipad",
    "size" : "29x29",
    "scale" : "1x"
},
{
    "idiom" : "ipad",
    "size" : "29x29",
    "scale" : "2x"
},
{
    "idiom" : "ipad",
    "size" : "40x40",
    "scale" : "1x"
},
{
    "idiom" : "ipad",
    "size" : "40x40",
    "scale" : "1x"
},
{
    "idiom" : "ipad",
    "size" : "40x40",
    "scale" : "2x"
},
{
    "idiom" : "ipad",
    "size" : "76x76",
    "scale" : "1x"
},
{
    "idiom" : "ipad",
    "size" : "76x76",
    "scale" : "2x"
},
{
    "idiom" : "ipad",
    "size" : "83.5x83.5",
    "scale" : "2x"
}

以上です

sftpをプロキシ(squid)または踏み台(ポートフォワーディング)経由で使用できるようにする

はじめに

やりたかったことはタイトル通りなのですが。

登場人物は以下
・作業用PC
・中継サーバー(踏み台 or プロキシ)
・開発サーバー

今回は中継サーバーと開発サーバーはcentos6.5で、作業PCはMacで確認。

アクセス制限は以下
・開発サーバーへのSSHでのアクセスは中継サーバーからしか接続できない。
・中継サーバーへは作業PCから接続できる。

作業するのがプログラマ以外なのでFTPクライアントソフトとかで接続できるようにしたい。というのがやりたかったことです。

調べてみて簡単に実装できそうな方法が2つ。
SSHポートフォワーディングを使う
・中継サーバーをプロキシサーバーにする
squidをいれてプロキシサーバーとする。作業者は中継サーバをプロキシに設定する形

これから先、サーバー名は以下とする
中継サーバー = relay
開発サーバー = dev

SSHポートフォワーディングを使う方法

ポートフォワーディング

$ ssh -N -L 2022:devのIP:devのポート relayのユーザ名@relayのIP
# Ctrl + cで終了
# 2022は適当なポート番号(作業用PCで空いてる番号)

SFTPで接続

$ sftp -oPort=2022 devのユーザ名@localhost

SFTP接続はターミナルから接続する例なのでコマンドだが、FileZilla等のFTPソフトを使ってる場合も上記の情報を設定すれば接続できる。

中継サーバーをプロキシサーバーにする

こっちの方がsquidを入れる必要があるので少し手間。
あと、SSHポートをプロキシとして解放するのでIP制限等をしない場合は、SSHのポート番号を変更した方がよさそう。今回は60022とかで話を進める。開発サーバー(接続先)のsshd_configでsshのポート番号を変更できるのでこちらは設定済であるとします。

squidのセットアップ

squidのインストール

$ yum install -y squid

/etc/squid/squid.confの編集

以下の項目をコメントアウト
#http_access deny all

http://qiita.com/pcnikki/items/404329f9ad9cb6e235d4
ここら辺とか参考にして最低限の設定はしておいた方がよさそう。
今回はsquidの公開ポートはデフォルトの3128で。

Basic認証設定

/etc/squid/squid.confの編集

# 以下を追加
auth_param basic program /usr/lib64/squid/ncsa_auth /etc/squid/passwd
acl password proxy_auth REQUIRED
http_access allow password

Basic認証用のユーザーを追加(更新、削除)

$ htpasswd -c /etc/squid/passwd user # 作成
$ htpasswd -b /etc/squid/passwd user pass # 追加
$ htpasswd -D /etc/squid/passwd user # 削除
SSHのポート番号をsquidで使えるようにする

/etc/squid/squid.confの編集

・・・
acl SSL_ports port 443
acl SSH_ports port 60022 # ★ココを追加
acl Safe_ports port 60022 # ★ココを追加
・・・

# ★ ココを書き換えてSSHもConnectメソッドを使えるように
# http_access deny CONNECT !SSL_ports
http_access deny CONNECT !SSL_ports !SSH_ports
・・・

squid起動

$ service squid start
SFTPでつなぐ
$ sftp -o "ProxyCommand connect -H basic認証のユーザ名@relayのIP:3128 %h %p" devのユーザー名@devのIP

とりあえず動いた。以上です

参考url
SquidでSSHをプロキシする設定。 - それマグで!
5分で作るPROXYサーバー - Qiita

sftpコマンドでプロキシ経由で接続する方法メモ

squidでたてたプロキシサーバー経由でsftp使うときのメモ

$ sftp -o "ProxyCommand connect -H プロキシのIP:プロキシのポート %h %p" sftpユーザー名@sftpサーバーのIP

以上です

【squid】プロキシにパスワード認証を設定する

次回のために作業メモ
squidのプロキシにパスワード認証(Basic認証)追加

ユーザー作成

# 新規作成
$ htpasswd -c /etc/squid/passwd user

# ユーザー追加
$ htpasswd -b /etc/squid/passwd user2 pass

# ユーザー削除
$ htpasswd -D /etc/squid/passwd user2

/etc/squid/squid.conf

# 追加
auth_param basic program /usr/lib64/squid/ncsa_auth /etc/squid/passwd
acl password proxy_auth REQUIRED
http_access allow password

再起動で設定反映

$ service squid restart

以上です