Skip to content

Commit 2b4aa7b

Browse files
fix(ios): enable swift development in Titanium (#11873)
Fixes TIMOB-28062
1 parent 4260e91 commit 2b4aa7b

File tree

12 files changed

+80
-70
lines changed

12 files changed

+80
-70
lines changed

iphone/Classes/AppModule.m

-1
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,6 @@
77
#ifdef USE_TI_APP
88

99
#import "AppModule.h"
10-
#import "TiUtils+Addons.h"
1110
#import <TitaniumKit/ListenerEntry.h>
1211
#import <TitaniumKit/TiApp.h>
1312
#import <TitaniumKit/TiHost.h>

iphone/Classes/GeolocationModule.m

-1
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,6 @@
77
#ifdef USE_TI_GEOLOCATION
88

99
#import "GeolocationModule.h"
10-
#import "TiUtils+Addons.h"
1110
#import <TitaniumKit/APSHTTPClient.h>
1211
#import <TitaniumKit/NSData+Additions.h>
1312
#import <TitaniumKit/TiApp.h>

iphone/Classes/PlatformModule.m

-1
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,6 @@
88

99
#import "PlatformModule.h"
1010
#import "TiPlatformDisplayCaps.h"
11-
#import "TiUtils+Addons.h"
1211
#import <TitaniumKit/JSValue+Addons.h>
1312
#import <TitaniumKit/TiApp.h>
1413

iphone/Classes/TiUtils+Addons.h

-25
This file was deleted.

iphone/Classes/TiUtils+Addons.m

-27
This file was deleted.

iphone/Classes/TiUtils+Addons.swift

+33
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
/**
2+
* Appcelerator Titanium Mobile
3+
* Copyright (c) 2020-present by Appcelerator, Inc. All Rights Reserved.
4+
* Licensed under the terms of the Apache Public License
5+
* Please see the LICENSE included with this distribution for details.
6+
*/
7+
8+
import TitaniumKit
9+
10+
extension TiUtils {
11+
12+
/**
13+
Returns a unique identifier for this app.
14+
15+
This will change upon a fresh install.
16+
17+
@return UUID for this app.
18+
*/
19+
@objc(appIdentifier)
20+
class func appIdentifier() -> String? {
21+
let kAppUUIDString = "com.appcelerator.uuid"
22+
let defaults = UserDefaults.standard
23+
var uid = defaults.string(forKey: kAppUUIDString)
24+
25+
if uid == nil {
26+
uid = TiUtils.createUUID()
27+
defaults.set(uid, forKey: kAppUUIDString)
28+
defaults.synchronize()
29+
}
30+
31+
return uid
32+
}
33+
}

iphone/TitaniumKit/TitaniumKit.xcodeproj/project.pbxproj

+1-1
Original file line numberDiff line numberDiff line change
@@ -1010,7 +1010,7 @@
10101010
"$(PROJECT_DIR)/TitaniumKit/Libraries/APSAnalytics",
10111011
"$(PROJECT_DIR)/TitaniumKit/Libraries/APSHTTPClient",
10121012
);
1013-
ONLY_ACTIVE_ARCH = NO;
1013+
ONLY_ACTIVE_ARCH = YES;
10141014
OTHER_CFLAGS = "-DTARGET_OS_IPHONE";
10151015
OTHER_LDFLAGS = (
10161016
"$(inherited)",

iphone/TitaniumKit/TitaniumKit.xcodeproj/xcshareddata/xcschemes/Distribution.xcscheme

+1-5
Original file line numberDiff line numberDiff line change
@@ -29,11 +29,9 @@
2929
shouldUseLaunchSchemeArgsEnv = "YES">
3030
<Testables>
3131
</Testables>
32-
<AdditionalOptions>
33-
</AdditionalOptions>
3432
</TestAction>
3533
<LaunchAction
36-
buildConfiguration = "Debug"
34+
buildConfiguration = "Release"
3735
selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
3836
selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
3937
launchStyle = "0"
@@ -51,8 +49,6 @@
5149
ReferencedContainer = "container:TitaniumKit.xcodeproj">
5250
</BuildableReference>
5351
</MacroExpansion>
54-
<AdditionalOptions>
55-
</AdditionalOptions>
5652
</LaunchAction>
5753
<ProfileAction
5854
buildConfiguration = "Release"

iphone/cli/commands/_build.js

+13-1
Original file line numberDiff line numberDiff line change
@@ -2956,6 +2956,8 @@ iOSBuilder.prototype.createXcodeProject = function createXcodeProject(next) {
29562956
obj.path = xobjs.PBXFileReference[id + '_comment'] = '"' + appName + '.entitlements"';
29572957
} else if (obj.path === 'Titanium.app') {
29582958
obj.path = xobjs.PBXFileReference[id + '_comment'] = '"' + appName + '.app"';
2959+
} else if (obj.path === '"Titanium-Bridging-Header.h"') {
2960+
obj.path = xobjs.PBXFileReference[id + '_comment'] = `"${scrubbedAppName}-Bridging-Header.h"`;
29592961
} else if (relPathRegExp.test(obj.path)) {
29602962
obj.path = obj.path.replace(relPathRegExp, '$1');
29612963
} else if (obj.path === 'LaunchScreen.storyboard' && appc.version.lt(this.xcodeEnv.version, '7.0.0')) {
@@ -2994,6 +2996,8 @@ iOSBuilder.prototype.createXcodeProject = function createXcodeProject(next) {
29942996
child.comment = '"' + appName + '.entitlements"';
29952997
} else if (child.comment === 'LaunchScreen.storyboard' && appc.version.lt(this.xcodeEnv.version, '7.0.0')) {
29962998
obj.children.splice(i--, 1);
2999+
} else if (child.comment === 'Titanium-Bridging-Header.h') {
3000+
child.comment = '"' + scrubbedAppName + '-Bridging-Header.h"';
29973001
}
29983002
}
29993003
}
@@ -3036,6 +3040,9 @@ iOSBuilder.prototype.createXcodeProject = function createXcodeProject(next) {
30363040
if (obj.buildSettings.PRODUCT_NAME === 'Titanium') {
30373041
obj.buildSettings.PRODUCT_NAME = '"' + appName + '"';
30383042
}
3043+
if (obj.buildSettings.SWIFT_OBJC_BRIDGING_HEADER === '"Titanium-Bridging-Header.h"') {
3044+
obj.buildSettings.SWIFT_OBJC_BRIDGING_HEADER = `"${scrubbedAppName}-Bridging-Header.h"`;
3045+
}
30393046
if (Array.isArray(obj.buildSettings.LIBRARY_SEARCH_PATHS)) {
30403047
obj.buildSettings.LIBRARY_SEARCH_PATHS.forEach(function (item, i, arr) {
30413048
arr[i] = item.replace(relPathRegExp, '$1');
@@ -4492,7 +4499,7 @@ iOSBuilder.prototype.copyTitaniumiOSFiles = function copyTitaniumiOSFiles() {
44924499

44934500
const nameChanged = !this.previousBuildManifest || this.tiapp.name !== this.previousBuildManifest.name,
44944501
name = this.sanitizedAppName(),
4495-
extRegExp = /\.(c|cpp|h|m|mm)$/,
4502+
extRegExp = /\.(c|cpp|h|m|mm|swift)$/,
44964503

44974504
// files to watch for while copying
44984505
appFiles = {};
@@ -4618,6 +4625,11 @@ iOSBuilder.prototype.copyTitaniumiOSFiles = function copyTitaniumiOSFiles() {
46184625
path.join(this.platformPath, 'iphone', 'Titanium_Prefix.pch'),
46194626
path.join(this.buildDir, name + '_Prefix.pch')
46204627
);
4628+
copyAndReplaceFile.call(
4629+
this,
4630+
path.join(this.platformPath, 'iphone', 'Titanium-Bridging-Header.h'),
4631+
path.join(this.buildDir, `${name}-Bridging-Header.h`)
4632+
);
46214633
copyAndReplaceFile.call(
46224634
this,
46234635
path.join(this.platformPath, 'iphone', 'Titanium.xcodeproj', 'xcshareddata', 'xcschemes', 'Titanium.xcscheme'),
+3
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
//
2+
// Use this file to import your target's public headers that you would like to expose to Swift.
3+
//

iphone/iphone/Titanium.xcodeproj/project.pbxproj

+14-6
Original file line numberDiff line numberDiff line change
@@ -163,6 +163,7 @@
163163
3A0E54371BE811CD003EE654 /* TiUIiOSMenuPopupProxy.m in Sources */ = {isa = PBXBuildFile; fileRef = 3A0E54361BE811CD003EE654 /* TiUIiOSMenuPopupProxy.m */; };
164164
3A1E40511BEAC73D00943233 /* TiUIiOSMenuPopup.m in Sources */ = {isa = PBXBuildFile; fileRef = 3A1E40501BEAC73D00943233 /* TiUIiOSMenuPopup.m */; };
165165
3A275F3E1BA881B300EC4912 /* TiUIActivityIndicatorStyleProxy.m in Sources */ = {isa = PBXBuildFile; fileRef = 3A275F3D1BA881B300EC4912 /* TiUIActivityIndicatorStyleProxy.m */; };
166+
3A38F30424D6EBBD00CC6EFB /* TiUtils+Addons.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3A38F30324D6EBBD00CC6EFB /* TiUtils+Addons.swift */; };
166167
3A3BBAF51D3E2F0F008450DF /* TiAppiOSUserNotificationCenterProxy.m in Sources */ = {isa = PBXBuildFile; fileRef = 3A3BBAF41D3E2F0F008450DF /* TiAppiOSUserNotificationCenterProxy.m */; };
167168
3A5AD7261BB9A6E4005B408B /* TiUIiOSPreviewActionGroupProxy.m in Sources */ = {isa = PBXBuildFile; fileRef = 3A5AD7251BB9A6E4005B408B /* TiUIiOSPreviewActionGroupProxy.m */; };
168169
3A5AD7291BB9BEA8005B408B /* TiUIiOSPreviewContextProxy.m in Sources */ = {isa = PBXBuildFile; fileRef = 3A5AD7281BB9BEA8005B408B /* TiUIiOSPreviewContextProxy.m */; };
@@ -176,7 +177,6 @@
176177
3AB9137C1BB60F070063A4AD /* TiPreviewingDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = 3AB9137B1BB60F070063A4AD /* TiPreviewingDelegate.m */; };
177178
3AB913801BB61FDA0063A4AD /* TiUIiOSPreviewActionProxy.m in Sources */ = {isa = PBXBuildFile; fileRef = 3AB9137F1BB61FDA0063A4AD /* TiUIiOSPreviewActionProxy.m */; };
178179
3ABA85AB1D7204B100BCD3F1 /* TiAppiOSSearchQueryProxy.m in Sources */ = {isa = PBXBuildFile; fileRef = 3ABA85AA1D7204B100BCD3F1 /* TiAppiOSSearchQueryProxy.m */; };
179-
4A4D3A9022C0CE6A003D2DB7 /* TiUtils+Addons.m in Sources */ = {isa = PBXBuildFile; fileRef = 4A4D3A8F22C0CE6A003D2DB7 /* TiUtils+Addons.m */; };
180180
673144D6211DBAD7001BDBF2 /* TiUIApplication.m in Sources */ = {isa = PBXBuildFile; fileRef = 673144D5211DBAD7001BDBF2 /* TiUIApplication.m */; };
181181
6CF8E95921CDA58800519245 /* TiUITabbedBarProxy.m in Sources */ = {isa = PBXBuildFile; fileRef = 6CF8E95821CDA58800519245 /* TiUITabbedBarProxy.m */; };
182182
823CC8AC1B7F0E4D00D220C7 /* WatchSessionModule.m in Sources */ = {isa = PBXBuildFile; fileRef = 823CC8AB1B7F0E4D00D220C7 /* WatchSessionModule.m */; };
@@ -609,6 +609,7 @@
609609
3A1E40501BEAC73D00943233 /* TiUIiOSMenuPopup.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = TiUIiOSMenuPopup.m; sourceTree = "<group>"; };
610610
3A275F3C1BA881B300EC4912 /* TiUIActivityIndicatorStyleProxy.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = TiUIActivityIndicatorStyleProxy.h; sourceTree = "<group>"; };
611611
3A275F3D1BA881B300EC4912 /* TiUIActivityIndicatorStyleProxy.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = TiUIActivityIndicatorStyleProxy.m; sourceTree = "<group>"; };
612+
3A38F30324D6EBBD00CC6EFB /* TiUtils+Addons.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "TiUtils+Addons.swift"; sourceTree = "<group>"; };
612613
3A3BBAF31D3E2F0F008450DF /* TiAppiOSUserNotificationCenterProxy.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = TiAppiOSUserNotificationCenterProxy.h; sourceTree = "<group>"; };
613614
3A3BBAF41D3E2F0F008450DF /* TiAppiOSUserNotificationCenterProxy.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = TiAppiOSUserNotificationCenterProxy.m; sourceTree = "<group>"; };
614615
3A5AD7241BB9A6E4005B408B /* TiUIiOSPreviewActionGroupProxy.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = TiUIiOSPreviewActionGroupProxy.h; sourceTree = "<group>"; };
@@ -635,8 +636,6 @@
635636
3AB9137F1BB61FDA0063A4AD /* TiUIiOSPreviewActionProxy.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = TiUIiOSPreviewActionProxy.m; sourceTree = "<group>"; };
636637
3ABA85A91D7204B100BCD3F1 /* TiAppiOSSearchQueryProxy.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = TiAppiOSSearchQueryProxy.h; sourceTree = "<group>"; };
637638
3ABA85AA1D7204B100BCD3F1 /* TiAppiOSSearchQueryProxy.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = TiAppiOSSearchQueryProxy.m; sourceTree = "<group>"; };
638-
4A4D3A8E22C0CE6A003D2DB7 /* TiUtils+Addons.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "TiUtils+Addons.h"; sourceTree = "<group>"; };
639-
4A4D3A8F22C0CE6A003D2DB7 /* TiUtils+Addons.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = "TiUtils+Addons.m"; sourceTree = "<group>"; };
640639
50115A9315D5DE0500122055 /* ThirdpartyNS.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = ThirdpartyNS.h; path = ../Classes/ThirdpartyNS.h; sourceTree = SOURCE_ROOT; };
641640
673144D4211DBAD7001BDBF2 /* TiUIApplication.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = TiUIApplication.h; path = ../Classes/TiUIApplication.h; sourceTree = "<group>"; };
642641
673144D5211DBAD7001BDBF2 /* TiUIApplication.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = TiUIApplication.m; path = ../Classes/TiUIApplication.m; sourceTree = "<group>"; };
@@ -697,6 +696,7 @@
697696
84EB08051A71948C00D35815 /* TiUIiOSSplitWindow.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = TiUIiOSSplitWindow.m; sourceTree = "<group>"; };
698697
AD3174C01D015DA9000D5F1A /* TiCalendarAttendee.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = TiCalendarAttendee.h; sourceTree = "<group>"; };
699698
AD3174C11D015DA9000D5F1A /* TiCalendarAttendee.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = TiCalendarAttendee.m; sourceTree = "<group>"; };
699+
B14703DF24DCE10100E8EBF4 /* Titanium-Bridging-Header.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "Titanium-Bridging-Header.h"; sourceTree = "<group>"; };
700700
B1E5DCF62463401A007817F8 /* TiUIShortcutProxy.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = TiUIShortcutProxy.h; sourceTree = "<group>"; };
701701
B1E5DCF72463401A007817F8 /* TiUIShortcutProxy.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = TiUIShortcutProxy.m; sourceTree = "<group>"; };
702702
B1E5DCFA24634057007817F8 /* TiUIShortcutItemProxy.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = TiUIShortcutItemProxy.h; sourceTree = "<group>"; };
@@ -1605,6 +1605,7 @@
16051605
29B97315FDCFA39411CA2CEA /* Other Sources */ = {
16061606
isa = PBXGroup;
16071607
children = (
1608+
B14703DF24DCE10100E8EBF4 /* Titanium-Bridging-Header.h */,
16081609
673144D4211DBAD7001BDBF2 /* TiUIApplication.h */,
16091610
673144D5211DBAD7001BDBF2 /* TiUIApplication.m */,
16101611
32CA4F630368D1EE00C91783 /* Titanium_Prefix.pch */,
@@ -1983,8 +1984,7 @@
19831984
children = (
19841985
DBF30945210F3B420001F770 /* TiApp+Addons.h */,
19851986
DBF30946210F3B420001F770 /* TiApp+Addons.m */,
1986-
4A4D3A8E22C0CE6A003D2DB7 /* TiUtils+Addons.h */,
1987-
4A4D3A8F22C0CE6A003D2DB7 /* TiUtils+Addons.m */,
1987+
3A38F30324D6EBBD00CC6EFB /* TiUtils+Addons.swift */,
19881988
DBF30942210F37080001F770 /* TiWindowProxy+Addons.h */,
19891989
DBF30943210F37080001F770 /* TiWindowProxy+Addons.m */,
19901990
);
@@ -2037,6 +2037,7 @@
20372037
LastUpgradeCheck = 1020;
20382038
TargetAttributes = {
20392039
1D6058900D05DD3D006BFB54 = {
2040+
LastSwiftMigration = 1150;
20402041
ProvisioningStyle = Manual;
20412042
SystemCapabilities = {
20422043
com.apple.BackgroundModes = {
@@ -2154,6 +2155,7 @@
21542155
3A1E40511BEAC73D00943233 /* TiUIiOSMenuPopup.m in Sources */,
21552156
84A0100417FC8D3500D4BF94 /* TiGravityBehavior.m in Sources */,
21562157
24CA8B79111161FE0084E2DE /* TiUITextFieldProxy.m in Sources */,
2158+
3A38F30424D6EBBD00CC6EFB /* TiUtils+Addons.swift in Sources */,
21572159
24CA8B7A111161FE0084E2DE /* TiUITextField.m in Sources */,
21582160
15CB44151C4ED54E00D81480 /* TiUIiOSSystemButtonProxy.m in Sources */,
21592161
24CA8B7B111161FE0084E2DE /* TiUITextAreaProxy.m in Sources */,
@@ -2202,7 +2204,6 @@
22022204
1592CC3A1C496EFB00C3DB83 /* TiUIiOSRowAnimationStyleProxy.m in Sources */,
22032205
24CA8BAA111161FE0084E2DE /* TiUIButton.m in Sources */,
22042206
24CA8BAC111161FE0084E2DE /* TiUIAlertDialogProxy.m in Sources */,
2205-
4A4D3A9022C0CE6A003D2DB7 /* TiUtils+Addons.m in Sources */,
22062207
24CA8BAE111161FE0084E2DE /* TiUIActivityIndicatorProxy.m in Sources */,
22072208
24CA8BAF111161FE0084E2DE /* TiUIActivityIndicator.m in Sources */,
22082209
24CA8BBC111161FE0084E2DE /* TiMediaVideoPlayerProxy.m in Sources */,
@@ -2374,6 +2375,7 @@
23742375
ALWAYS_SEARCH_USER_PATHS = NO;
23752376
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
23762377
ASSETCATALOG_COMPILER_LAUNCHIMAGE_NAME = LaunchImage;
2378+
CLANG_ENABLE_MODULES = YES;
23772379
CLANG_ENABLE_OBJC_WEAK = YES;
23782380
CLANG_WARN_UNGUARDED_AVAILABILITY = NO;
23792381
"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
@@ -2404,6 +2406,9 @@
24042406
"OTHER_LDFLAGS[sdk=iphonesimulator*]" = "$(inherited)";
24052407
PRODUCT_BUNDLE_IDENTIFIER = com.appcelerator.titanium;
24062408
PRODUCT_NAME = Titanium;
2409+
SWIFT_OBJC_BRIDGING_HEADER = "Titanium-Bridging-Header.h";
2410+
SWIFT_OPTIMIZATION_LEVEL = "-Onone";
2411+
SWIFT_VERSION = 5.0;
24072412
TARGETED_DEVICE_FAMILY = "1,2";
24082413
WARNING_CFLAGS = "-Wno-arc-performSelector-leaks";
24092414
};
@@ -2417,6 +2422,7 @@
24172422
ALWAYS_SEARCH_USER_PATHS = NO;
24182423
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
24192424
ASSETCATALOG_COMPILER_LAUNCHIMAGE_NAME = LaunchImage;
2425+
CLANG_ENABLE_MODULES = YES;
24202426
CLANG_ENABLE_OBJC_WEAK = YES;
24212427
CLANG_WARN_UNGUARDED_AVAILABILITY = NO;
24222428
"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
@@ -2445,6 +2451,8 @@
24452451
"OTHER_LDFLAGS[sdk=iphonesimulator*]" = "$(inherited)";
24462452
PRODUCT_BUNDLE_IDENTIFIER = com.appcelerator.titanium;
24472453
PRODUCT_NAME = Titanium;
2454+
SWIFT_OBJC_BRIDGING_HEADER = "Titanium-Bridging-Header.h";
2455+
SWIFT_VERSION = 5.0;
24482456
TARGETED_DEVICE_FAMILY = "1,2";
24492457
WARNING_CFLAGS = "-Wno-arc-performSelector-leaks";
24502458
};

tests/Resources/ti.platform.test.js

+15-2
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
* Licensed under the terms of the Apache Public License
55
* Please see the LICENSE included with this distribution for details.
66
*/
7-
/* global OS_VERSION_MAJOR, OS_VERSION_MINOR */
7+
/* global OS_VERSION_MAJOR, OS_VERSION_MINOR, OS_IOS */
88
/* eslint-env mocha */
99
/* eslint no-unused-expressions: "off" */
1010
'use strict';
@@ -215,7 +215,13 @@ describe('Titanium.Platform', function () {
215215

216216
it('.id', () => {
217217
should(Ti.Platform).have.readOnlyProperty('id').which.is.a.String();
218-
// TODO Verify format?!
218+
if (OS_IOS) {
219+
const platformId = Ti.Platform.id;
220+
should(platformId).be.a.String();
221+
should(platformId.length).eql(36);
222+
// Verify format using regexp!
223+
platformId.should.match(/^[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/i);
224+
}
219225
});
220226

221227
it('.locale', () => {
@@ -225,6 +231,13 @@ describe('Titanium.Platform', function () {
225231

226232
it('.macaddress', () => {
227233
should(Ti.Platform).have.readOnlyProperty('macaddress').which.is.a.String();
234+
if (OS_IOS) {
235+
const macaddress = Ti.Platform.macaddress;
236+
should(macaddress).be.a.String();
237+
should(macaddress.length).eql(36);
238+
// Verify format using regexp!
239+
macaddress.should.match(/^[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/i);
240+
}
228241
});
229242

230243
it('.manufacturer', () => {

0 commit comments

Comments
 (0)