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!!

Monday, March 14, 2016

Item Url Replacement Improvements - Sitecore 8.1 Update-2 Settings - Part 3

In this post, I would like to discuss about another setting that is introduced with Sitecore 8.1 rev. 160302 (Update-2), which is related to item name URL replacements

Ths setting we are going to discuss is
<!--  ITEM NAME ALLOW MIXING REPLACEMENT CHARACTERS
          Specifies whether you can create items with names that contain the values defined in the 'find' and 'replaceWith' properties in the
         'encodeNameReplacements' section.
          Default value: true.
    -->

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

Early versions of Sitecore (earlier than 8.1 Update-2), if you have define character replacements for url's and want to include both parts 'find' and 'replaceWith'   from 'encodeNameReplacements' section, Sitecore failed to process the URL and find a matching item to serve.


for example,
  • you have defined following setting in <encodeNameReplacements> section 
<replace mode="on" find=" " replaceWith="-" />
  • and you have created an item with following name under /sitecore/content/home
"sample item-1"          (please note both space ('find' part) & hyphen ('replaceWith' part)
  • Sitecore generates above item url as http://hostname/sample-item-1
  • and request to above url (i.e. http://hostname/sample-item-1) returns item not found error.


As a solution to the above issue, in earlier versions of Sitecore, what we did was to restrict hyphens (-) character from item names, by adding hyphen into "InvalidItemNameChars" setting.
 <setting name="InvalidItemNameChars" value="\/:?&quot;&lt;&gt;|[]-" />
This option restricted Content Editors by creating item names with hyphen character.


BUT,


With this new functionality introduced with Sitecore 8.1 Update-2, Sitecore will process above kind of senario URL's without any issue and successfully find the correct item to render.


Below is the video in Sitecore for Dummies YouTube channel, which discuss about this setting.




Happy Sitecore!

Sunday, March 13, 2016

New Cloning Related Features - Sitecore 8.1 Update-2 Settings - Part 1


Today I went through the configuration changes for the Sitecore 8.1 rev. 160302 (Update-2), which contains following config change to App_Config\Sitecore.config file, which I will go through one by one.

ItemCloning.DeleteClonesWithOriginalItem Setting

<setting name="ItemCloning.DeleteClonesWithOriginalItem" value="false" /> 

This is another very useful functionality added into 8.1 update-2, where cloned items will be also deleted when the source item is deleted.

In earlier version, when a Source item is deleted, Sitecore converts its clones into normal items, and did NOT provide any option to delete clones at the same time.

ItemCloning.DeleteClonesWithOriginalItem set to "false"


But, with this setting set to 'true', when the source / original item is deleted, clones of that item will also get deleted.

ItemCloning.DeleteClonesWithOriginalItem set to "true"

Video explaining the usage of this setting can be found in my "Sitecore for Dummies" YouTube channel.


Following is the description Sitecore has provided with this config setting.

 <!--  ITEM CLONING - DELETE CLONES WITH ORIGINAL ITEM    
Specifies whether item clones should be deleted when the original item is deleted. If true, when the original item is deleted all its clones are deleted and not just uncloned.    
Default value: false
-->

For a one of my clients which Sitecore 6.6 few years back, I had to re-write the item delete functionality, so that it included this option.

ItemCloning.ForceUpdate.ChangeTemplate Setting

<setting name="ItemCloning.ForceUpdate.ChangeTemplate" value="false" />
In earlier versions of Sitecore, templates of clones were not updated, once the source item template is changed. With this new setting set to true, clones will also get updated with the source/original item template changes.

Video explaining the usage of this setting can be found in my "Sitecore for Dummies" YouTube channel.

Following is the description give to the setting in Sitecore configuration file
<!--  ITEM CLONING - FORCE UPDATE - CHANGE TEMPLATE
       Specify whether clones should be updated automatically when a different template is selected for the original item.
       Note: If true, all the clones of the original item are updated automatically.
       Default value: false
 -->

ItemCloning.RelinkClonedSubtree Setting

<setting name="ItemCloning.RelinkClonedSubtree" value="false" />

As you can see from the config description below, this will re-link all the links on items, within the cloning sub-tree.
<!--  ITEM CLONING - RELINK CLONED SUBTREE    
Indicates that after cloning an item tree structure, all the internal links inside the cloned structure should be re-linked to point to the items in the cloned sub-tree. When the setting value is false, the links in the cloned structure will still link to the items in the original structure.    
Default value: false
-->
This setting is very useful one, when doing content structuring/cloning a new node/etc. Earlier, when a new clone node was created, we had to run a custom written tool to modify the links to be match/used items within the newly cloned item sub-tree.

Video explaining the usage of this setting can be found in my "Sitecore for Dummies" YouTube channel.



Happy Sitecore!!