Xamarin.Forms: Platform specific code in SAP and PCL
.Net Class and API or some features that behave differently on each platform so we need to write some code on platform specific. Below two library for sharing code between multiple platform
- Shared asset project
( SAP) - Portable Class library (PCL)
You can share code across multiple platform projects. Your Code is compiled as part of each referencing project and can include compiler directives to help incorporate platform-specific functionality into the shared code base.
Build Symbol
|
Description
|
__MOBILE__
|
Support iOS and Android specific code
|
__IOS__
| |
__TVOS__
|
TV Specific Code
|
__WATCHOS__
|
Watch Specific code
|
__ANDROID__
|
Android Specific Code
|
__MAC__
|
Mac Specify Code
|
_WINDOWS_PHONE and SILVERLIGHT
|
Windows Phone Specific code
|
Visual Studio:
The compiler directives on your platform specific project. Right Click on your Platform Specific Project ➔ Click on property ➔ Select Build OptionChange the Configuration drop downs at the top of the Options to see the symbols for each different build configuration
Xamarin Studio:
Right-click Project > Options > Build > Compiler > Define Symbols.Change the Configuration drop downs at the top of the Options to see the symbols for each different build configuration
Define symbol like below in shared project and Add reference into all the platform project and assign value into textbox control or others control
using System;
namespace DevXamarinForm.Shared
{
public class Common
{
public Common()
{
}
public string PrintText()
{
string printtext ="No Device Specfic";
#if __MOBILE__
printtext= "iOS or Android specific code";
#endif
#if __IOS__
printtext= "iOS specific code";
#endif
#if __TVOS__
printtext= tv specific stuff";
#endif
#if __ANDROID__
printtext="Android specific code";
#endif
#if _WINDOWS_PHONE
printtext="Android-specific code";
#endif
return printtext;
}
}
}
Portable Class library: [compiler directives do not work in PCLs]
Portable class libraries are platform independent. PCL do not allow to use conditional compilation .This is because PCL should work on all specified platforms which was chosen as a target and Also, availability of features depends on selected targets.
We can use same above way but that is not recommended way. Let we see how we will do same above
Step 1:
Create Class file like above under PCL projectStep 2:
Right Click Specific Platform project ➔ Add ➔ Existing Item ➔Select PCL project ➔ Select Common Class file ➔ select “Add as Link”It will work same like Shared Project.
Recommended approach to writing platform conditional code in a PCL:
The Device class contains a number of properties and methods to help developers customize layout and functionality on a per-platform basis.
using System;
using Xamarin.Forms;
namespace DevXamarinForm
{
public class Common
{
public Common()
{
}
public string PrintText()
{
string printtext = "No device Specfic Device";
if (Device.OS == TargetPlatform.iOS)
{
printtext = "iOS specific code";
}
else if (Device.OS == TargetPlatform.Android)
{
printtext = "Android specific code";
}
else if (Device.OS == TargetPlatform.Windows)
{
printtext = "Windows specific code";
}
else if (Device.OS == TargetPlatform.WinPhone)
{
printtext = "Winphone specific code";
}
else if (Device.OS == TargetPlatform.Other)
{
printtext = "Other specific code";
}
return printtext;
}
}
}
0 Comments