Change Navigation Bar Color in iOS 15

If your app changed the color of navigation bar (background / foreground / text color / tint color), it is probably broken in the new iOS 15. Here is how I fix them in Xamarin:

if (UIDevice.CurrentDevice.CheckSystemVersion(15, 0))
    // change the background and text color of title bar
    var appearance = new UINavigationBarAppearance();
    appearance.BackgroundColor = CustomColor.AccentColor;
    appearance.TitleTextAttributes = new UIStringAttributes() { ForegroundColor = CustomColor.ForegroundColor };
    appearance.LargeTitleTextAttributes = new UIStringAttributes() { ForegroundColor = CustomColor.ForegroundColor };

    UINavigationBar.Appearance.StandardAppearance = appearance;
    UINavigationBar.Appearance.ScrollEdgeAppearance = appearance;
    // change the background color of title bar
    UINavigationBar.Appearance.BarTintColor = CustomColor.AccentColor;
    UINavigationBar.Appearance.Translucent = false;

    // change the title text color
    UINavigationBar.Appearance.TitleTextAttributes = new UIStringAttributes() { ForegroundColor = CustomColor.ForegroundColor };

// change the button color on navigation bar
UINavigationBar.Appearance.TintColor = CustomColor.ForegroundColor;

UWP Submission Error 1201 and Weird Certification Crash

A whole month, this random submission error 1201 and unproducible crash reported by certification team of Windows store promoted me to look for the problem and solution in my UWP app that never existed.

When submitting the app to Windows Store, the submission will typical fail within 5 minutes after pre-processing complete. The following error message is what shown:

This submission failed with error code(s) 1201 . More info about the error(s) can be found here.

Quick online search mention about using old Microsoft.NETCore.UniversalWindowsPlatform may caused this problem, but I’m using the latest version 6.2.8 which doesn’t have this problem. The certification team told me to resubmit the app because this might be just some random issue on the server, which I did and fail again. I recompile the whole package again and submit to Windows Store. Well, everything went wel…. crash, crash, crash!

Now certification team told me that my app crash on startup which I was not able to reproducible at all using the same package I submitted to Windows store. I even tested it on multiple different machine which different language and region configuration. So I did the same trick of recompile and submit. The app still crash on startup when certification team tried the app. Here are the stack track captured in crash report, although it make no sense to me.

appname::app onlaunched()
stowed_exception 80131500: stowed_exception
combase.dll    RoOriginateLanguageException() error.cpp:1504
System.Private.Interop    System::Runtime::InteropServices::ExceptionHelpers OriginateLanguageException() ExceptionHelpers.cs:113
System.Private.Interop    System::Runtime::InteropServices::ExceptionHelpers GetHRForExceptionWithErrorPropogationNoThrow() ExceptionHelpers.cs:219
System.Private.Interop    System::Runtime::InteropServices::McgMarshal GetHRForExceptionWinRT() McgMarshal.cs:1239
appname.UniversalWindows.McgInterop.dll    __Interop::ReverseComStubs.Stub_12_System __Canon_$catch$0() SharedStubs.g.cs:11147
mrt100_app.dll    RhpCallCatchFunclet2() exceptionhandling.asm:438
mrt100_app.dll    System::Runtime::EH DispatchEx() ExceptionHandling.cs:683
mrt100_app.dll    System::Runtime::EH RhThrowEx() ExceptionHandling.cs:552
mrt100_app.dll    RhpThrowEx2() exceptionhandling.asm:198
System.Private.Interop    System::Runtime::InteropServices::McgMarshal ThrowOnExternalCallFailed() McgMarshal.cs:1267
appname.UniversalWindows.McgInterop.dll    __Interop::ComCallHelpers Call() SharedStubs.g.cs:8527
appname.UniversalWindows.McgInterop.dll    Windows::UI::Xaml::Controls::IFrame__Impl::Stubs Navigate() ImplTypes.g.cs:158360
appname.UniversalWindows.McgInterop.dll    Windows::UI::Xaml::Controls::Frame Navigate() SafeTypes.g.cs:44489
appname.UniversalWindows.exe    appname::App OnLaunched() App.xaml.cs:76
System.Private.Threading    System::Progress$1_$89_System::VoidValueTypeParameter_.System.IProgress_T_ Report() SafeTypes.g.cs:23264
appname.UniversalWindows.McgInterop.dll    __Interop::ReverseComStubs.Stub_12_System __Canon_() SharedStubs.g.cs:11130
appname.UniversalWindows.McgInterop.dll    Windows::UI::Xaml::IApplicationOverrides__Impl::Vtbl OnLaunched__n() ImplTypes.g.cs:138287
Windows.UI.Xaml.dll    DirectUI::FrameworkApplicationGenerated OnLaunchedProtected() frameworkapplication.g.cpp:502
Windows.UI.Xaml.dll    DirectUI::FrameworkView OnActivated() frameworkview_partial.cpp:267
Windows.UI.Xaml.dll    Microsoft::WRL::Details::DelegateArgTraits_long (__cdecl Windows::Foundation::ITypedEventHandler_impl_Windows::Foundation::Internal::AggregateType_Windows::UI::Core::CoreWindow *,Windows::UI::Core::ICoreWindow *_,IInspectable *_ *)() event.h:245
Microsoft::WRL::InvokeTraits_-2_::InvokeDelegates__lambda_3ad0adb09957fd62cbc86618ebbeb8fa_,Windows::Foundation::ITypedEventHandler_Windows::ApplicationModel::Core::CoreApplicationView *,Windows::ApplicationModel::Activation IActivatedEventArgs *_ _() internalevent.h:119
twinapi.appcore.dll    Windows::ApplicationModel::Core::CoreApplicationView Activate() coreapplicationview.cpp:545
rpcrt4.dll    Invoke() invoke.asm:183
rpcrt4.dll    Ndr64StubWorker() srvcall.cxx:392
rpcrt4.dll    NdrStubCall3() srvwrap.cxx:166
combase.dll    CStdStubBuffer_Invoke() stub.cxx:1446
rpcrt4.dll    CStdStubBuffer_Invoke() ndrfwds.cxx:182
combase.dll    ObjectMethodExceptionHandlingAction__lambda_c9f3956a20c9da92a64affc24fdd69ec_ _() excepn.hxx:87
combase.dll    DefaultStubInvoke() channelb.cxx:1452
combase.dll    SyncServerCall StubInvoke() servercall.hpp:826
combase.dll    ServerCall ContextInvoke() ctxchnl.cxx:1418
combase.dll    ASTAInvokeInApartment() applicationsta.cpp:470
combase.dll    AppInvoke() channelb.cxx:1182
combase.dll    ComInvokeWithLockAndIPID() channelb.cxx:2290
combase.dll    ThreadDispatch() chancont.cxx:416
combase.dll    ModernSTAState HandleMessage() modernsta.cpp:472
combase.dll    ModernSTAWaitContext HandlePriorityEventsFromMessagePump() modernsta.cpp:1550
Windows.UI.dll    Windows::UI::Core::CDispatcher ProcessMessage() dispatcher.cpp:339
Windows.UI.dll    Windows::UI::Core::CDispatcher WaitAndProcessMessagesInternal() dispatcher.cpp:1953
Windows.UI.dll    Windows::UI::Core::CDispatcher WaitAndProcessMessages() dispatcher.cpp:461
twinapi.appcore.dll    _lambda_643db08282a766b00cec20194396f531_ operator() coreapplicationviewagilecontainer.cpp:1145
SHCore.dll    _WrapperThreadProc() thread.cpp:321
ntdll.dll    RtlUserThreadStart() rtlstrt.c:1152

Contacted certification support team, but the certification support team insist that I should contact the developer support team. Contacted the developer support team, but the developer support team insist that I should contact the certification support team. In the end, both doesn’t even provide any help or direction and keep quiet.

Long story, I rollback some changes and resubmit the app, everything went smooth. But none of the code I rollback look suspicious at all. In fact they aren’t. Add back the code and everything went hair wired again. In fact, during the app package compilation, .NET native toolchain start to fail, but I usually ignore them because they can be resolve by recompile again. In the end, I emailed .NET native team for help. This is what I get back.

We have seen similar symptoms when the compiler runs out of memory while compiling the app. Sometimes apps are on the edge, and timing around how memory is allocated is all that makes the difference between success and failure.

We have a 64 bit compiler available that can operate with more memory. Can you try to add <Use64BitCompiler>true</Use64BitCompiler> to a PropertyGroup in your main CSPROJ file?

You should be able to validate that it’s doing the right thing by enabling diagnostic build output in Visual Studio, switching build configuration to Release and building the project. In the build log, there should be a line with nutc_driver.exe in it. The nutc_driver.exe that was invoked should be in a tools64 directory (as opposed to the tools directory used by default).


Adding Use64BitCompiler is a life saver! It totally work and the app went through submission without a problem at all minimum problem. Gosh, that took long enough! This is the few thing I learn:

  • Windows Store will re-compile your package submitted. I never knew that, I though they just testing the package procvided.
  • UWP app can grow big very quickly espcially if you use a lot of nuget libraries.
  • Bad archtecture design will cause .NET native to run to limitation much quicker, such as two view model is refering each other directly.
  • We really need a 64 bits Visual Studio.
  • If app submission still hitting error 1201, resubmit again until it success.


How To Install User Script in Firefox with TamperMonkey

Install TamperMonkey on your Firefox browser first if you haven’t done yet. It should be as easy as any add-on install. TamperMonkey support Firefox Quantum, so it should have no problem running on the latest Firefox version. You should notice the TamperMonkey icon is added in the toolbar once you have it installed.


Continue reading How To Install User Script in Firefox with TamperMonkey

How to Copy / Download User Script from GitHub

Many user ask us this question because they are not familiar / never use GitHub before. You doesn’t need any other tool or client program to download the code in GitHub. Since user script usually available in a single file, it is easy enough to just go and download that single file or direct copy in text form from there.

First go to the repository you are interested. Look for .user.js file. Click on it to open.


Continue reading How to Copy / Download User Script from GitHub

System.ComponentModel.TypeDescriptionProvider Error

What Happen

Encounter this error what trying to compile a Windows Phone 8.1 project: “Xaml Internal Error error WMC9999: Cannot find type System.ComponentModel.TypeDescriptionProvider in module System.dll”

What Caused

Playing around with my project by try to install Entity Framework from nuget, then remove them later. The compilation start to fail starting from there.

What Solution

Go to References, look for System.ComponentModel or System.ComponentModel.* references. In my case, it is the System.ComponentModel.DataAnnotations. Remove them and try recompile your project again. It should work now.

My First Visual / Infographic Resume

One day, one of my friends contacted me for a job offer. His company is hiring and he wish to recommend me to the manager. Let’s not mention about the company’s name. Hmm… it is a multi-nation company with M character in front, that’s all. So I think it is a great chances to try something different and it is a big company, why not give it a try, right?

Well, since it is big and well-known company, I assume there will be a lot of submission other than mine. I need a special and attractive resume to impress the manager. Something like infographic to represent my resume will be great. Honestly, I’m not really good with design or photoshop, so I need something simple yet good enough to stand out from others. In the end, I choose to use timeline and map base design to create my own visual resume.

Below are the first 2 pages of my resume. It is a summary of the whole resume in visual format. The first page show my working experiences, education and my own projects in timeline. While the second page show my worldwide achievements in a world map. I also afraid that some one might want to know more detail about my work from the resume, so I included another 6 pages of “boring” text base writeup with detail info after the visual resume.


Continue reading My First Visual / Infographic Resume

Microsoft Word 2013 – Remove Markup Area

In my previous post, I have encounters a problem in Microsoft Word 2013 where the markup area (a huge blank space on the right hand side which is colored in light silver / gray color) keep on pop-up whenever I tries to print my word document or I save my document to PDF format. Instead hiding it every time whenever I tries to print the document, I have found a way to completely remove it.


Continue reading Microsoft Word 2013 – Remove Markup Area

Hoax Alert – Top 10 Facebook Friends Who Viewed Your Profile

Recently I saw some of my Facebook friends start spreading a rather weird method to check and see the top 10 Facebook friends who viewed or stalk your Facebook profile. Below are the 2 examples of the method share through out the Facebook. I’m very sure it is a hoax when I first know of it.

So what are those ID use in Facebook? Those are the the Facebook users / friends which will appear in your top Facebook chat list especially those who recently chat with your or send you any Facebook message. It is nothing special. Even if you don’t enable Facebook chat, those ID will be there too.

As of today, I never heard of any method where you can actually track who viewed or stalked your Facebook profile. So don’t caught by those silly hoax that are try to attract your attention by telling you how to track your friends. None of them work!

by Ooi Keng Siang via Ooiks’s Blog

Speed Typing – Challenge Accepted

It all started when one of my friends posted a challenged post on Facebook. Beat his result in So me and my friends think it will be fun to accept the challenge and maybe make fun on our friend a little bit. Ever though we have been warned not to use any kind of cheating… well…


Continue reading Speed Typing – Challenge Accepted

Stop Facebook Like Video 1.2

Those Chinese video sharing website just don’t give up, do they? They are adding more domain name to their video sharing website and force viewer to like and share the video before watching it. I had update the script to support up to 5 known domain name for the video sharing. If you found any new domain, just post on the comment and I will update the script to by pass that.


Script Description

Have enough for those website that force you to like the video before you can watch them? The worse part is the video will post on your Facebook wall without you knowing what is the content of the video at the first place.
This script can help you get rip of those trouble. When you click on the video link post by your friends, it will first load up the website and then the script will automatically redirect you to YouTube that playing that video bypass the like button. You no longer need to like the video first before you watch it and you can make sure your Facebook wall is clean without rubbish!


Continue reading Stop Facebook Like Video 1.2