Friday, August 5, 2016

Xamarin.Forms InitializeContext Does Not Exists In The Current Context Error Due to Title Property in ContentPage tag


I am new to Xamarin.. As a first app with Xamarin I started to develop an cross-platform mobile application to one of my friends project.
After creating a new Xamarin Forms project in Visual Studio and started to add new pages by looking at examples in Xamarin developer website.

But, after some time, I started to receive an issue in my Visual Studio project. The error was, it starts to give "The name 'initializeContext' does not exists in the current context" error.. it comes suddenly and stays..

I tried clean and rebuild the VS project. Also, remove Xamarin.Forms NuGet package folder and restored it. But, anything didn't solve my issue.


But, After looking into xaml pages I remember that I added "Title" property to "ContentPage" nodes..

<?xml version="1.0" encoding="utf-8" ?>
<ContentPage xmlns="http://xamarin.com/schemas/2014/forms"             xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"             x:Class="MyFirst.Mobile.App.Pages.HomePage"             Title="Home">

I just tried to remove that property and that is.. Everything started to work again...


Even thought I can see this "Title" property in Xamarin Developer website examples, it sometimes started to return some unexpected results...


So, I hope if this helps someone who faces this same issue in future...

Happy Xamaring... :-)

Monday, July 25, 2016

Presenting at Colombo Xamarin Meetup in Sri Lanka - How to Organize Your Xamarin Solution

At the upcoming meetup organized by Colombo Xamarin Meetup team, I'm presenting "How to Organize Your Xamarin Solution"

http://www.meetup.com/Colombo-Xamarin-Meetup/events/232773783/


In the presentation, I am planing to talk about how to organize your Xamarin Solution by adhering to common .NET practices and Design Pattners.

Also, I will talk about how Xamarin application can talk to third-party SDK and work with them by using Sitecore Mobile SDK for Xamarin.


Hope to See you on Thursday ! :-)



Following is the banner for the meetup created by Colombo Xamarin Meetup team.

Image Credit : Colombo Xamarin Meetup

Thursday, June 16, 2016

How to Setup and Test WhiteLabel-iOS App Provided by Sitecore Mobile SDK Team On Xamarin Studio on Mac

Recently, I need to try out the WhiteLabel-iOS mobile application provided by Sitecore Mobile SDK GitHub repository. Even though it was not hard to setup and test this, I had to solved few minor issue which I thought might help someone in future.

So, following are the steps you need to do in order to setup and run WhiteLabel-iOS mobile app on your Macbook with Xamarin Studio.

Note: I assume that you have already installed Xcode and Xamarin Studio into you Macbook

Step 1: Setup Sitecore instance

In this case, I am using Windows with Parallels software on my macbook. So, I setup Sitecore Habitat website instance in my windows VM with the host name of "habitat.local"


Step 2: Configure access to Sitecore instance from Macbook

You can see full setup instruction of a normal .NET website with access from mac from following url
https://www.getdonedone.com/accessing-your-windows-development-environment-from-osx/

Some of the main steps that I did was,
Disabled the Firewall in Windows
Added the host entry into Macbook /private/etc/hosts file


So, now I can visit "http://habitat.local" from my Macbook Pro.



Step 3: Clone Sitecore Mobile SDK for Xamarin repository

Open a Terminal window and clone the github repo
https://github.com/Sitecore/sitecore-xamarin-pcl-sdk


Step 4: Open WhiteLable-iOS solution from Xamarin Studio and run Simulator

After cloning the github repository, open "/sitecore-xamarin-pcl-sdk/solutions/WhiteLabel-iOS.sln"  solution file from Xamarin Studio and run Simulator

At this point, you will receieve an error message with Simulation failing



Error : /Library/Frameworks/Mono.framework/External/xbuild/Xamarin/iOS/Xamarin.iOS.Common.targets: Error: No installed provisioning profiles match the installed iOS signing identities. (WhiteLabel-iOS)


Solution :
To solve above issue, you need to manuall edit the related .csproj file (i.e. "/sitecore-xamarin-pcl-sdk/app/WhiteLabel/iOS/WhiteLabel-iOS/WhiteLabel-iOS.csproj") and remove following tags from that file
<CodesignEntitlements>Entitlements.plist</CodesignEntitlements>
Reference :
http://forums.xamarin.com/discussion/39534/cant-build-ios-in-xamarin-studio-5-7-1-through-5-9
http://stackoverflow.com/questions/30724551/no-installed-provisioning-profiles-match-the-installed-ios-code-signing-keys-in


After that, I was successfully able to launch WhiteLabel-iOS app from Xamarin Studio and run Simulator on it.



Step 5: Configure App Settings

As final step, I clicked on the "Edit" icon in top right corner of the application to visit Settings page of the application. There I gave "http://habitat.local" (which is my windows installed Sitecore instance) as my hostname for the website.



Now, I can run the application and test the operations/functionality in that application.


Happy Sitecore + Xamarin !  :-)

Monday, June 13, 2016

Issue While Trying to Add Sitecore Mobile SDK NuGet Packages into Shared Portable Xamarin Project

Recently, I tried to create a new Xamarin Forms solution to test Sitecore Mobile SDK.

First I creating Xamarin Forms solution in Visual Studio.



Then I tried to add following NuGet Package into the Shared Portable Forms project.


Sitecore Mobile SDK for Xamarin NuGet Packages

Once I tried to Install the "Sitecore.MobileSDK.Xamarin" NuGet packages into the project, it failed the installation with following error message.

Error : Could not install package 'Sitecore.MobileSDK.Xamarin 1.0.1'. You are trying to install this package into a project that targets '.NETPortable,Version=v4.5,Profile=Profile111', but the package does not contain any assembly references or content files that are compatible with that framework. For more information, contact the package author.

I reported this behaviour to the team who handles Sitecore Mobile SDK development and they are very helpful and came back to me with the issue.

Reason for above mention issue was that current Sitecore Mobile SDK for Xamarin build assemblies does not support ASP.NET Core 1.0 yet (as of 13/06/2016).




Sitecore Mobile SDK team will work on this issue and will release assemblies in coming few days.


As a workaround, the team suggested to use their source code and build the libraries locally.

You can find the Sitecore Mobile SDK from following Git repository
https://github.com/Sitecore/sitecore-xamarin-pcl-sdk


NOTE: Adding these Sitecore Mobile SDK NuGet packages into Xamarin Studio does work without any issues.


UPDATE : 25/07/2016
    Sitecore Mobile SDK team has provided a update for there NuGet feeds, which has solved the above mention issue:
        Sitecore.MobileSDK.Xamarin 1.0.2-beta1
        Sitecore.MobileSDK.PasswordProvider 1.0.3-beta1

Tuesday, May 10, 2016

Wrong Way to Patch Processor Params with Sitecore Patch Files

Recently, I had to look into an issue where Sitecore Rich Text Editor starts to display some buttons incorrectly on Hyperlink Manager popup window, as shown below






And when checked using Firebug, I can see that Sitecore is returning 500 error for ScriptResource.axd Urls.


http://<hostname>/ScriptResource.axd?d=5WkzNtzG0Iu_bSt84IS-lYFjFGuFXd3pdFFzPJGdqcFIuGYf2XpqGIuCBTqN9bJIQAaJ2kch7IJgHvqLtwY9fHsn0fn-cX5VNiqGRLNDhdxtCd6aGXAbZEUgdiGQtJ1ktTGlF3pRIhHkY1NQhI_YZAHBEZQLMlfWmgnlHln8D8A1&t=40eb3b32




When checked with ShowConfig.aspx, it turns out to be "Sitecore.Pipelines.PreprocessRequest.FilterUrlExtensions" processor has been removed from "preprocessRequest" pipeline.

So, when checked our custom configuration files added into /App_Config/Includes/zzz folder, I can see there was a configuration file with following configurations. With this, developer has tried to patch Sitecore connfigurations, but in a wrong way.

<?xml version="1.0"?>
<configuration xmlns:patch="http://www.sitecore.net/xmlconfig/">
  <sitecore>
    <pipelines>
      <preprocessRequest>
        <processor patch:instead="processor[@type='Sitecore.Pipelines.PreprocessRequest.FilterUrlExtensions, Sitecore.Kernel']" type="Sitecore.Pipelines.PreprocessRequest.FilterUrlExtensions, Sitecore.Kernel">
          <param desc="Allowed extensions (comma separated)">aspx, ashx, asmx, abc</param>
          <param desc="Blocked extensions (comma separated)">*</param>
          <param desc="Blocked extensions that stream files (comma separated)">*</param>
          <param desc="Blocked extensions that do not stream files (comma separated)">
          </param>
        </processor>
      </preprocessRequest>
    </pipelines>
  </sitecore>
</configuration>


As you can see, even though above config has used "patch:instead", it uses same "type" value, which makes Sitecore to totally remove the above processor from configs.

One correct way to achieve above requirement is mention below. That configuration will replace the "param" value with new given value (i.e. "aspx, ashx, asmx, abc")


<?xml version="1.0"?>
<configuration xmlns:patch="http://www.sitecore.net/xmlconfig/">
  <sitecore>
    <pipelines>
      <preprocessRequest>
        <processor type='Sitecore.Pipelines.PreprocessRequest.FilterUrlExtensions, Sitecore.Kernel'>
          <param desc="Allowed extensions (comma separated)">aspx, ashx, asmx, abc</param>
          </param>
        </processor>
      </preprocessRequest>
    </pipelines>
  </sitecore>
</configuration>

Happy Sitecore !!

Monday, May 2, 2016

Usage of Publishing.PublishEmptyItems Setting

Recently we had a discussion in Sitecore Community forum regarding a template container (template folder) not getting published and it causes the child templates also remove from web database.

The reason for this issue was the template container (template folder item) did not had any language versions defined. It was only an empty item without any versions.

One of friends from community suggested to adjust the Publishing.PublishEmptyItems setting to true, to allow Sitecore to publish empty items.

<!--
    PUBLISHING PUBLISH EMPTY ITEMS
    Specifies whether empty items (i.e. items without publishable versions) should be published.
    Default value: false
-->
<setting name="Publishing.PublishEmptyItems" value="false" />

But, eventhough that setting will solve this above issue mentions, can cause some serious side effects.


Sitecore had bugs related to empty item versions getting created automatically without knowledge of editors.

First senario I faced this was with Sitecore 6.6 release.
In that initial version of Sitecore, when a item created with a other language than 'en' language, Sitecore automatically created an empty item version in 'en' language also. (Sitecore Bug)

Also, recently I saw a same kind of issue on community forum, where empty item versions getting created with Sitecore 8.1 update-1.
https://community.sitecore.net/developers/f/8/t/2616


So, setting the Publishing.PublishEmptyItems setting to 'true' will cause these empty items to be get published.


So, correct way (or best practice) would be to create versions for the Containers/Folders also, which will allow publishing to work accordingly, while keeping the Publishing.PublishEmptyItems setting to "false"


Happy Sitecore!!

Sunday, April 17, 2016

Duplicate Item Names On Same Level Setting - Sitecore 8.1 Update-2 Settings - Part 2

This is the part 2 of the blog post series to discuss new settings introducted with Sitecore 8.1 Update-2.

There is a new settings added into App_Config\Sitecore.config file with Sitecore 8.1 rev. 160302 (Update-2), which relates to Duplicate item names.

AllowDuplicateItemNamesOnSameLevel Setting


As this setting name implies, you can enable/disable duplicate item names on same level of Sitecore content tree.

In earlier versions of Sitecore (earlier than 8.1 Update-2), it was possible to create duplicate item names in same level and there were no setting to disable that. On earlier Sitecore versions, you had to implement custom rules/custom coding to restrict duplicate item names.

<setting name="AllowDuplicateItemNamesOnSameLevel" value="true" />

With Sitecore 8.1 Update-2, you can disable duplicate item names by making the "AllowDuplicateItemNamesOnSameLevel" setting to 'false'




Description of the setting can be found below

<!--  ALLOW DUPLICATE ITEM NAMES ON THE SAME LEVEL
     Specifies whether the duplicate item names are allowed on the same level in the content tree.    
     Default value: true
-->

Happy Sitecore!!