Category Archives: Xamarin

Xamarin C#: ステータスバーのフォントの色を白くしたい

アプリのバックグランドを暗めに設定する時、ステータスバーのテキストを白くする必要があります。

ネット上にはiOSのバージョン9以下では素直に設定できたのに、storyboardが出てきたあたりからできなくなっているような記事がありました。(storyboardの起動画面ではステータスバーのテキストはViewControllerの設定により白になっている)

が、色々コード上で(特にAppDelegateあたり)でoverrideして色を変えてみたのですがうまくいきませんでした。

そして結果的には、View controller-based status bar appearanceプロパティをInfo.plistに追加してBoolean値を”No”に設定することで解決することができました。

作る側もインターフェースからの入力で、簡単にフォーマットが作れたりするのもいいですが、アプリの起動時のシーケンスが複雑になったり、知らないうちに起動の順序、ルールが設定されていたりして。アップルらしいインプリだけど)ちょっと時間食われました(2日)

View controller-based status bar appearanceをBoolean: Noに設定したところ
ステータスバーのテキストが白になったところ

App Store Connect: アプリの申請の時に、「1個のローカリゼーションでエラーが発生しました」と表示される

新しいiPadや、iPhone XRがリリースされると、必須のスクリーンショットが増えていて定期的なアップデートの申請で、「1個のローカリゼーションでエラーが発生しました」と表示されます。

調べていると、メディアマネージャの設定で解決するとのことですが、App Store Connectの申請ページに「メディアマネージャで全てのサイズを表示」のリンクが表示されず、メディアマネージャが開けない状態で、エラーの対処ができない状態でした。

その後ウィンドウサイズの問題(ウィンドウサイズが狭い時はこのリンクは表示されません。改行もされず消えるだけ)と気が付いて、iPhone 5.5インチディスプレイにiPhone 6.5インチの画像を使用するというチェックを入れて、申請することができました。

正常な表示

ウィンドウの幅が狭い時

私の場合、フリーランスでアプリを作っているので問題ないですが、こんなの上司にプッシュされたらやってられませんね。(以下略)
アプリ開発は焦らず、そしてできるときに早めにやっておくのがいいでしょう。

参考までに。

C#(String.Format)で現在の日付時刻表示

珍しくTech。(自分のメモに残したかったので)
C#のデバッグでログを日付と時間を書式付きで表示したい場合がある。

時間表示は、hh:mm:ss:fff 13:35:23:123
カスタム表記で、時:分:秒:ミリ秒を2桁で0表示ありの場合は下の通り。

String.Format(“{0:hh:mm:ss:fff}”, DateTime.Now);

主な記号とサンプル:
y (year)
M (month)
d (day)
h (hour 12)
H (hour 24)
m (minute)
s (second)
f (second fraction)
F (second fraction, trailing zeroes are trimmed)
t (P.M or A.M)
z (time zone).

サンプル:
String.Format(“{0:y yy yyy yyyy}”, dt); // “8 08 008 2008” year
String.Format(“{0:M MM MMM MMMM}”, dt); // “3 03 Mar March” month
String.Format(“{0:d dd ddd dddd}”, dt); // “9 09 Sun Sunday” day
String.Format(“{0:h hh H HH}”, dt); // “4 04 16 16” hour 12/24
String.Format(“{0:m mm}”, dt); // “5 05” minute
String.Format(“{0:s ss}”, dt); // “7 07” second
String.Format(“{0:f ff fff ffff}”, dt); // “1 12 123 1230” sec.fraction
String.Format(“{0:F FF FFF FFFF}”, dt); // “1 12 123 123” without zeroes
String.Format(“{0:t tt}”, dt); // “P PM” A.M. or P.M.
String.Format(“{0:z zz zzz}”, dt); // “-6 -06 -06:00” time zone

パターンの表記は以下の通り:
Specifier DateTimeFormatInfo property Pattern value (for en-US culture)
t ShortTimePattern h:mm tt
d ShortDatePattern M/d/yyyy
T LongTimePattern h:mm:ss tt
D LongDatePattern dddd, MMMM dd, yyyy
f (combination of D and t) dddd, MMMM dd, yyyy h:mm tt
F FullDateTimePattern dddd, MMMM dd, yyyy h:mm:ss tt
g (combination of d and t) M/d/yyyy h:mm tt
G (combination of d and T) M/d/yyyy h:mm:ss tt
m, M MonthDayPattern MMMM dd
y, Y YearMonthPattern MMMM, yyyy
r, R RFC1123Pattern ddd, dd MMM yyyy HH’:’mm’:’ss ‘GMT’ (*)
s SortableDateTi­mePattern yyyy’-‘MM’-‘dd’T’HH’:’mm’:’ss (*)
u UniversalSorta­bleDateTimePat­tern yyyy’-‘MM’-‘dd HH’:’mm’:’ss’Z’ (*)

サンプル:
String.Format(“{0:t}”, dt); // “4:05 PM” ShortTime
String.Format(“{0:d}”, dt); // “3/9/2008” ShortDate
String.Format(“{0:T}”, dt); // “4:05:07 PM” LongTime
String.Format(“{0:D}”, dt); // “Sunday, March 09, 2008” LongDate
String.Format(“{0:f}”, dt); // “Sunday, March 09, 2008 4:05 PM” LongDate+ShortTime
String.Format(“{0:F}”, dt); // “Sunday, March 09, 2008 4:05:07 PM” FullDateTime
String.Format(“{0:g}”, dt); // “3/9/2008 4:05 PM” ShortDate+ShortTime
String.Format(“{0:G}”, dt); // “3/9/2008 4:05:07 PM” ShortDate+LongTime
String.Format(“{0:m}”, dt); // “March 09” MonthDay
String.Format(“{0:y}”, dt); // “March, 2008” YearMonth
String.Format(“{0:r}”, dt); // “Sun, 09 Mar 2008 16:05:07 GMT” RFC1123
String.Format(“{0:s}”, dt); // “2008-03-09T16:05:07” SortableDateTime
String.Format(“{0:u}”, dt); // “2008-03-09 16:05:07Z” UniversalSortableDateTime

2018年8月以降APIレベル26Android 8.0以下はリリースできない?

今は、Android版のアプリはデフォルトでAPIレベル14以上としているのだけれど、今回のリリースで気になるメッセージが出ている。2018年8月以降、APIレベル26以上が必須になるような事を言っている。

Android8.0(OREO)って現状最新のバージョンだけれど、開発者側はAndroid7.0や、Android5.0はサポートしないという事なのか、何か新しい機能で7.0や5.0に8.0のビルドを起動できるようになるのか。

今回リリースしたアプリの依頼者は少なくとも5.0ユーザなのだが・・・

 

 

 

XamarinがAzure依存になりつつある?

VS2017に慣れて来ている今日この頃、NuGetのPluginが必須になりつつある。機能も実装も手軽になってやりたいことがすぐにできるようになってきました。あとはアイディア次第でヒットもできそう。

Xamarinがマイクロソフトに吸収されて、ドキュメント関係がMSDNに取り込まれて来ている現状。その中で、目立つのがPluginsがAzureの依存が多くなっている。

実際にはNuGetのプラグインを入れる例のページがAzureを例に出している。

というちょっとした不満。