Skip to content

Commit b7e0f5b

Browse files
fix: DeviceProfileCallback fix for RN iOS sample app
FRProximity is now working as expected in React Native iOS app
1 parent e017e92 commit b7e0f5b

4 files changed

Lines changed: 161 additions & 132 deletions

File tree

reactnative/reactnative-todo/ios/Podfile

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,8 @@ end
1616

1717
target 'reactnativetodo' do
1818
config = use_native_modules!
19-
pod 'FRAuth', '4.6.0'
19+
pod 'FRAuth', '4.8.1'
20+
pod 'FRProximity', '4.8.1'
2021

2122
use_react_native!(
2223
:path => config[:reactNativePath],

reactnative/reactnative-todo/ios/Podfile.lock

Lines changed: 62 additions & 57 deletions
Original file line numberDiff line numberDiff line change
@@ -3,9 +3,11 @@ PODS:
33
- DoubleConversion (1.1.6)
44
- FBLazyVector (0.76.3)
55
- fmt (9.1.0)
6-
- FRAuth (4.6.0):
7-
- FRCore (~> 4.6.0)
8-
- FRCore (4.6.0)
6+
- FRAuth (4.8.1):
7+
- FRCore (~> 4.8.1)
8+
- FRCore (4.8.1)
9+
- FRProximity (4.8.1):
10+
- FRAuth (~> 4.8.1)
911
- glog (0.3.5)
1012
- hermes-engine (0.76.3):
1113
- hermes-engine/Pre-built (= 0.76.3)
@@ -1716,7 +1718,8 @@ DEPENDENCIES:
17161718
- DoubleConversion (from `../node_modules/react-native/third-party-podspecs/DoubleConversion.podspec`)
17171719
- FBLazyVector (from `../node_modules/react-native/Libraries/FBLazyVector`)
17181720
- fmt (from `../node_modules/react-native/third-party-podspecs/fmt.podspec`)
1719-
- FRAuth (= 4.6.0)
1721+
- FRAuth (= 4.8.1)
1722+
- FRProximity (= 4.8.1)
17201723
- glog (from `../node_modules/react-native/third-party-podspecs/glog.podspec`)
17211724
- hermes-engine (from `../node_modules/react-native/sdks/hermes-engine/hermes-engine.podspec`)
17221725
- RCT-Folly (from `../node_modules/react-native/third-party-podspecs/RCT-Folly.podspec`)
@@ -1788,6 +1791,7 @@ SPEC REPOS:
17881791
trunk:
17891792
- FRAuth
17901793
- FRCore
1794+
- FRProximity
17911795
- SocketRocket
17921796

17931797
EXTERNAL SOURCES:
@@ -1934,74 +1938,75 @@ SPEC CHECKSUMS:
19341938
DoubleConversion: f16ae600a246532c4020132d54af21d0ddb2a385
19351939
FBLazyVector: be7314029d6ec6b90f0f75ce1195b8130ed9ac4f
19361940
fmt: 10c6e61f4be25dc963c36bd73fc7b1705fe975be
1937-
FRAuth: 8ee626b80066ac112fd2ffd06a137e2402631e75
1938-
FRCore: 46f35e02a80106d8a74c75cd3bfd81e619c20a52
1941+
FRAuth: 13433377e8e2271b633614dcf0ab77c6009f55dc
1942+
FRCore: 2d5c0950e334c9aae2a96108985b4128b4e62a58
1943+
FRProximity: d6ff01e39b23f9f0d1f326e55c086e81b45eea36
19391944
glog: 08b301085f15bcbb6ff8632a8ebaf239aae04e6a
19401945
hermes-engine: 0555a84ea495e8e3b4bde71b597cd87fbb382888
1941-
RCT-Folly: bf5c0376ffe4dd2cf438dcf86db385df9fdce648
1946+
RCT-Folly: 84578c8756030547307e4572ab1947de1685c599
19421947
RCTDeprecation: 2c5e1000b04ab70b53956aa498bf7442c3c6e497
19431948
RCTRequired: 5f785a001cf68a551c5f5040fb4c415672dbb481
19441949
RCTTypeSafety: 6b98db8965005d32449605c0d005ecb4fee8a0f7
19451950
React: 8077bf7c185afb515be82518507e16f71a247a5e
19461951
React-callinvoker: 519eee9520727805e2867a6d8dad4ebbeed543db
1947-
React-Core: e364ceda7d086c7d14adeec0eb880a90073e3dde
1948-
React-CoreModules: 291be650024d9db086c95fd1d7e7d9607c6de62b
1949-
React-cxxreact: 5cf17d13ca0fc0734e1bb0ed9615d1d1fc45ef78
1952+
React-Core: 14708d0ebf0f961647347a7ae9cebcfaa75c99aa
1953+
React-CoreModules: 42b62e50cb4ac9a8ca92b48b263355cebcc1a523
1954+
React-cxxreact: 846f1d9eb37a3dec19738d195d313deb7e9ee36b
19501955
React-debug: 931ca94abd6b1bcab539e356e20df788afecae8f
1951-
React-defaultsnativemodule: 6afc2dd3619bac12dc54c1ee939bf14f9aa96b42
1952-
React-domnativemodule: f140d46f6f3c3f1efc987c98b464fcbece0cc93a
1953-
React-Fabric: e1774fe4b579e34c2c5721e9351c8ce869e7b5f0
1954-
React-FabricComponents: 528ff9f96d150379ed404221d70cc7019ca76865
1955-
React-FabricImage: 31680b7ddc740e040277176fbd6541fcf0fd44af
1956+
React-defaultsnativemodule: 6bf85ecab795c74bfc1662ab34dd2428e65d2f29
1957+
React-domnativemodule: bdcc445e1893ba53706a5229b1ba2dd17b0cc9f6
1958+
React-Fabric: 2709bcae28c5b567337b3bad4ec1aa8b81aa1241
1959+
React-FabricComponents: f35e150acf873109d244bd8c4535425d51f26672
1960+
React-FabricImage: 6dd7af0496dae7924553f8b3cd2b134d86256a48
19561961
React-featureflags: 7c7a74b65ee5a228f520b387ebfe0e8d9cecc622
1957-
React-featureflagsnativemodule: dd3450366b1c9557975e457ce6baa151ccee84da
1958-
React-graphics: 7f0d3e06d356e8476bd8ba95d90762fc01138ebc
1959-
React-hermes: f83fafe6a1c845dace7abad4a5d7366cbb42ab96
1960-
React-idlecallbacksnativemodule: 14ce331438e2bca7d464a8a211b14543aff4dc91
1961-
React-ImageManager: 2b9274ea973f43597a554a182d7ef525836172c6
1962-
React-jserrorhandler: 3b521485275d295cfc6ec6bfa921a1d608693ecf
1963-
React-jsi: fd23c1d759feb709784fd4c835b510b90a94dd12
1964-
React-jsiexecutor: 74628d57accc03d4b5df53db813ef6dcd704c9ae
1965-
React-jsinspector: 89a1e27e97c762de81bd4b9cb1314750304bba38
1966-
React-jsitracing: 11b6646d7b2ecdc7a475f65b2cb12d3805964195
1967-
React-logger: 26155dc23db5c9038794db915f80bd2044512c2e
1968-
React-Mapbuffer: ad1ba0205205a16dbff11b8ade6d1b3959451658
1969-
React-microtasksnativemodule: e771eb9eb6ace5884ee40a293a0e14a9d7a4343c
1970-
react-native-safe-area-context: 2500e4fe998caad50ad3bc51ec23ef951308569e
1962+
React-featureflagsnativemodule: 5bfa52be77b3cd0d05fadd9694e5304705079095
1963+
React-graphics: ba13cb82b71ec2e0ad9dac2ae31867b5656d5a28
1964+
React-hermes: 4bfb5c90304c4d2aa36b3404ddd00df591dcae8a
1965+
React-idlecallbacksnativemodule: 5f0b9b4b18f28b43d80eb0cf94e1f559da6ceaba
1966+
React-ImageManager: 0464b2fac74d9d06d44abc3e85035424fc0d1a70
1967+
React-jserrorhandler: 4c8ee0547d89d1bfe9cd740ca83d229934cc94e4
1968+
React-jsi: 927e83b5aef299ca42842cd1ad696c4cf301d5eb
1969+
React-jsiexecutor: ba6b1fbaa388a99fcfb750529fed3ce65efbda4f
1970+
React-jsinspector: 1f9f161bf0961df50d2843802a431eb4fd4059cf
1971+
React-jsitracing: f6f65398e2d58bd24523ba210b277681e9cf2ee0
1972+
React-logger: 2736a90a3fdaed3dab1e2e9c5a5e9b3be00c287d
1973+
React-Mapbuffer: bd6a2ffbf401f11cfc8b5e8f38acab9fe117620c
1974+
React-microtasksnativemodule: 2fa3b8c7a876b84bd8166f11e07f101929a87f97
1975+
react-native-safe-area-context: 819935871d06a80e963546208027f839aa972a85
19711976
React-nativeconfig: aeed6e2a8ac02b2df54476afcc7c663416c12bf7
1972-
React-NativeModulesApple: c5b7813da94136f50ef084fa1ac077332dcfc658
1973-
React-perflogger: 6afb7eebf7d9521cc70481688ccddf212970e9d3
1974-
React-performancetimeline: 81884d35896b22d51832e7c8748c8330ec73c491
1977+
React-NativeModulesApple: c0783e5e21c71aa2764ac33120abc96208466fa6
1978+
React-perflogger: 2991d4258277af250eb7a2705980ebb3ef9ba85e
1979+
React-performancetimeline: 76a55d0be7293adfce8603eafb8dbae92234352d
19751980
React-RCTActionSheet: c940a35d71686941ac2b96dd07bde11ea0f0c34f
1976-
React-RCTAnimation: e1dbb4e530d6f58437ab2fae372de3788ecdffab
1977-
React-RCTAppDelegate: f9825950ac2c52ae1cf46b648bb362b86b62fe41
1978-
React-RCTBlob: 9cdac4721a76e2d132fb1760eafd0a8f150d1c96
1979-
React-RCTFabric: c0aa01a448bcebb1326d068ed7545eb11561e663
1980-
React-RCTImage: f09f5165807e1a69a2bbac6c7168a8ed57ed4e26
1981-
React-RCTLinking: 4ea06b79cba7e15d8af4d86b1dcede6bd29a47fd
1982-
React-RCTNetwork: 43a38148c7a4a2380e76b08f07f02ee8eaac8965
1983-
React-RCTSettings: cc60bb6b38eed0683696b5ddf45b0a4a1441147b
1984-
React-RCTText: fbe5e6e886beefd5d432790bc50b7aa2b6504264
1985-
React-RCTVibration: 061dbf7a0a1e77bfc1c4672e7be6884dc12f18bf
1981+
React-RCTAnimation: db10ffa5b463794089b5319818f1df1e0b996422
1982+
React-RCTAppDelegate: 9ab258d9de05f6ed56ea1f6b20e5adc6baaaf13f
1983+
React-RCTBlob: 2ede907cfc8039c5f5da32b3ba9e144b663c3c98
1984+
React-RCTFabric: 6c5f6469b8a46a2c61cf954b20d36fdb1c6f010a
1985+
React-RCTImage: 3d6b5cc404c62d2b2cd767061a56bd48b4300f5e
1986+
React-RCTLinking: 548cf5c3fe935f3d0c8df5dc3c234283df48cea6
1987+
React-RCTNetwork: 59f683fee79f9187b8ee4c270343b474ad37b42c
1988+
React-RCTSettings: b14bd94b2ac87c803375a0873746ef31c7b0eead
1989+
React-RCTText: 24e7a9b64341d6a1c98e1eabc5471b88c8bc61f1
1990+
React-RCTVibration: 2830b19dca45d23dc61b3c93c25fbc7b85979202
19861991
React-rendererconsistency: 52b471890a1946991f2db81aa6867b14d93f4ea5
1987-
React-rendererdebug: 3f63479f704e266a3bf104c897315a885c72859b
1992+
React-rendererdebug: c2496eb27c25d367b7e80a8a4a1babc21b6cc64b
19881993
React-rncore: 33ea67bfd2eeaa4f4a0c9e0e8bd55e9b7ccb9faa
1989-
React-RuntimeApple: bcd91a191637ab5895593135de74ac54bf88df5d
1990-
React-RuntimeCore: 3a42a7f12f5f6cc4cb0e22446540165d204d7a15
1994+
React-RuntimeApple: 28bcdbce4517b9428ab127d42d7b6bfeb27eb69c
1995+
React-RuntimeCore: d629b37225984a26c57803d857c8357c839f3fef
19911996
React-runtimeexecutor: db3f17084ee7b71ab84912c527d428cc3a137841
1992-
React-RuntimeHermes: 91bcd6aeec4bab20cebd33cb8984e3825ccdc77e
1993-
React-runtimescheduler: 92a5a092ded9a9aaac765ac940d26b52bac48901
1997+
React-RuntimeHermes: 5d857268954776a1c6f0e0ecff1f7860806bb43b
1998+
React-runtimescheduler: 00be5844aa2c7d72fd47293e0798bb41462ecfee
19941999
React-timing: 54693ad0872f64127f7cb41675b1be4fd28ea4dc
1995-
React-utils: 2bcaf4f4dfe361344bce2fae428603d518488630
1996-
ReactCodegen: ae99a130606068ed40d1d9c0d5f25fda142a0647
1997-
ReactCommon: 89c87b343deacc8610b099ac764848f0ce937e3e
1998-
RNCAsyncStorage: 3ad840f7b17b45ca7ebbbb0e80948564a9513315
1999-
RNScreens: 44a3e358d5ccd7815c5ae9148988c562826992b2
2000-
RNSVG: 0ac7301275469a63da5178fad6930833012c5a7c
2001-
RNVectorIcons: 07792a9538e8577c1263fcad187712e90d65d8fb
2000+
React-utils: ee370a52b08a000963af1a60c31e6c87a70620a5
2001+
ReactCodegen: 5148a0102fc8f0a1f9b05d955da886b44447679d
2002+
ReactCommon: b8485556b596ef2f44f59bc586113bda138fb804
2003+
RNCAsyncStorage: 71c8f2a45fd37d39669192239d13a9d291c55b43
2004+
RNScreens: 06e1f09654d2da4ff95dee6621b2b13b033e9c5a
2005+
RNSVG: 35e5be7217865b96ae4678cf42090623311bb9d0
2006+
RNVectorIcons: a24016b773380b1aa37fca501ec6b94a951890a0
20022007
SocketRocket: d4aabe649be1e368d1318fdf28a022d714d65748
2003-
Yoga: f6dc1b6029519815d5516a1241821c6a9074af6d
2008+
Yoga: 3deb2471faa9916c8a82dda2a22d3fba2620ad37
20042009

2005-
PODFILE CHECKSUM: 0a34c757b3defb01f5b98c79f4a20b2e9ff668ac
2010+
PODFILE CHECKSUM: a7489dd103d1e39d903cc640b0d00b2e297c0991
20062011

2007-
COCOAPODS: 1.15.2
2012+
COCOAPODS: 1.16.2

reactnative/reactnative-todo/ios/reactnativetodo/FRAuthSampleBridge.swift

Lines changed: 60 additions & 41 deletions
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,8 @@ public class FRAuthSampleBridge: NSObject {
3030
*/
3131
@objc func start(
3232
_ resolve: @escaping RCTPromiseResolveBlock,
33-
rejecter reject: @escaping RCTPromiseRejectBlock) {
33+
rejecter reject: @escaping RCTPromiseRejectBlock
34+
) {
3435
/**
3536
* Set log level according to your needs
3637
* Options are ...
@@ -40,59 +41,69 @@ public class FRAuthSampleBridge: NSObject {
4041
* - network
4142
* - warning
4243
* - error
43-
* - all
44+
* - all
4445
*/
4546
FRLog.setLogLevel([.all])
46-
do {
47-
/** *************************************************************************
48-
* SDK INTEGRATION POINT
49-
* Summary: Initialize the SDK
50-
* --------------------------------------------------------------------------
51-
* Details: This initializes the iOS SDK. It can take a moment to resolve,
52-
* so we add a slight delay to ensure no other SDK methods are called before
53-
* the SDK is ready.
54-
************************************************************************* */
55-
let config = Configuration()
56-
let options = FROptions(url: config.amURL, realm: config.realm, cookieName: config.cookieName, authServiceName: config.mainAuthenticationJourney, oauthClientId: config.oauthClientId, oauthRedirectUri: config.oauthRedirectURI, oauthScope: config.oauthScopes)
57-
try FRAuth.start(options: options)
58-
59-
DispatchQueue.main.asyncAfter(deadline: .now() + 2.0) {
60-
/**
61-
* Check for FRAuth.shared. If it exists, the SDK is good to go. If not,
62-
*/
63-
if (FRAuth.shared != nil) {
64-
resolve("SDK initialized")
65-
} else {
66-
reject("Error", "SDK not initialized; please check the log for details", nil)
47+
DispatchQueue.main.async {
48+
do {
49+
/** *************************************************************************
50+
* SDK INTEGRATION POINT
51+
* Summary: Initialize the SDK
52+
* --------------------------------------------------------------------------
53+
* Details: This initializes the iOS SDK. It can take a moment to resolve,
54+
* so we add a slight delay to ensure no other SDK methods are called before
55+
* the SDK is ready.
56+
************************************************************************* */
57+
let config = Configuration()
58+
let options = FROptions(
59+
url: config.amURL,
60+
realm: config.realm,
61+
cookieName: config.cookieName,
62+
authServiceName: config.mainAuthenticationJourney,
63+
oauthClientId: config.oauthClientId,
64+
oauthRedirectUri: config.oauthRedirectURI,
65+
oauthScope: config.oauthScopes
66+
)
67+
try FRAuth.start(options: options)
68+
69+
DispatchQueue.main.asyncAfter(deadline: .now() + 2.0) {
70+
/**
71+
* Check for FRAuth.shared. If it exists, the SDK is good to go. If not,
72+
*/
73+
if FRAuth.shared != nil {
74+
resolve("SDK initialized")
75+
} else {
76+
reject("Error", "SDK not initialized; please check the log for details", nil)
77+
}
6778
}
6879
}
69-
}
70-
catch {
71-
FRLog.e(error.localizedDescription)
72-
reject("Error", "SDK failed during the initialization process", error)
80+
catch {
81+
FRLog.e(error.localizedDescription)
82+
reject("Error", "SDK failed during the initialization process", error)
83+
}
7384
}
7485
}
75-
86+
7687
/**
7788
* Method for the initial call to the journey/tree defined in `forgerock_auth_service_name` within the FRAuthConfig.
7889
*/
7990
@objc func login(
8091
_ resolve: @escaping RCTPromiseResolveBlock,
8192
rejecter reject: @escaping RCTPromiseRejectBlock) {
82-
83-
/** *************************************************************************
84-
* SDK INTEGRATION POINT
85-
* Summary: Make initial request to the journey/tree for login
86-
* --------------------------------------------------------------------------
87-
* Details: This calls the tree assigned to login within the FRAuthConfig.
88-
* It returns a `node`, which is also known as a "step". This `node` is a
89-
* collection of "callbacks", which represent a request for atomic
90-
* information.
91-
************************************************************************* */
92-
FRUser.login { (user, node, error) in
93-
self.handleNode(user, node, error, resolve: resolve, rejecter: reject)
93+
94+
/** *************************************************************************
95+
* SDK INTEGRATION POINT
96+
* Summary: Make initial request to the journey/tree for login
97+
* --------------------------------------------------------------------------
98+
* Details: This calls the tree assigned to login within the FRAuthConfig.
99+
* It returns a `node`, which is also known as a "step". This `node` is a
100+
* collection of "callbacks", which represent a request for atomic
101+
* information.
102+
************************************************************************* */
103+
FRUser.login { (user, node, error) in
104+
self.handleNode(user, node, error, resolve: resolve, rejecter: reject)
105+
}
94106
}
95-
}
96107

97108
/**
98109
* Method for the initial call to the journey/tree defined in `forgerock_registration_service_name`
@@ -408,6 +419,14 @@ public class FRAuthSampleBridge: NSObject {
408419
/**
409420
* Method for handling Device Profile Callback.
410421
* This callback is used to collect device information, such as location and metadata.
422+
*
423+
* ⚠️ Important:
424+
* For this to function as expected make sure you have added the required
425+
* privacy usage description keys in your Info.plist:
426+
*
427+
* - NSBluetoothAlwaysUsageDescription
428+
* - NSFaceIDUsageDescription
429+
* - NSLocationWhenInUseUsageDescription
411430
*/
412431
private func handleDeviceProfileCallback(
413432
_ callback: DeviceProfileCallback,

reactnative/reactnative-todo/ios/reactnativetodo/Info.plist

Lines changed: 37 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -31,9 +31,13 @@
3131
<key>NSAllowsLocalNetworking</key>
3232
<true/>
3333
</dict>
34+
<key>NSBluetoothAlwaysUsageDescription</key>
35+
<string>This app uses Bluetooth to connect and communicate with nearby devices.</string>
36+
<key>NSFaceIDUsageDescription</key>
37+
<string>FaceID is required for biometric authentication</string>
3438
<key>NSLocationWhenInUseUsageDescription</key>
35-
<string></string>
36-
<key>UILaunchStoryboardName</key>
39+
<string>This app uses geo-location service to collect device information</string>
40+
<key>UILaunchStoryboardName</key>
3741
<string>LaunchScreen</string>
3842
<key>UIRequiredDeviceCapabilities</key>
3943
<array>
@@ -47,37 +51,37 @@
4751
</array>
4852
<key>UIViewControllerBasedStatusBarAppearance</key>
4953
<false/>
50-
<key>UIAppFonts</key>
51-
<array>
52-
<string>OpenSans-Bold.ttf</string>
53-
<string>OpenSans-BoldItalic.ttf</string>
54-
<string>OpenSans-ExtraBold.ttf</string>
55-
<string>OpenSans-ExtraBoldItalic.ttf</string>
56-
<string>OpenSans-Italic.ttf</string>
57-
<string>OpenSans-Light.ttf</string>
58-
<string>OpenSans-LightItalic.ttf</string>
59-
<string>OpenSans-Medium.ttf</string>
60-
<string>OpenSans-MediumItalic.ttf</string>
61-
<string>OpenSans-Regular.ttf</string>
62-
<string>OpenSans-SemiBold.ttf</string>
63-
<string>OpenSans-SemiBoldItalic.ttf</string>
64-
<string>AntDesign.ttf</string>
65-
<string>Entypo.ttf</string>
66-
<string>EvilIcons.ttf</string>
67-
<string>Feather.ttf</string>
68-
<string>FontAwesome.ttf</string>
69-
<string>FontAwesome5_Brands.ttf</string>
70-
<string>FontAwesome5_Regular.ttf</string>
71-
<string>FontAwesome5_Solid.ttf</string>
72-
<string>Fontisto.ttf</string>
73-
<string>Foundation.ttf</string>
74-
<string>Ionicons.ttf</string>
75-
<string>MaterialCommunityIcons.ttf</string>
76-
<string>MaterialIcons.ttf</string>
77-
<string>Octicons.ttf</string>
78-
<string>SimpleLineIcons.ttf</string>
79-
<string>Zocial.ttf</string>
80-
</array>
54+
<key>UIAppFonts</key>
55+
<array>
56+
<string>OpenSans-Bold.ttf</string>
57+
<string>OpenSans-BoldItalic.ttf</string>
58+
<string>OpenSans-ExtraBold.ttf</string>
59+
<string>OpenSans-ExtraBoldItalic.ttf</string>
60+
<string>OpenSans-Italic.ttf</string>
61+
<string>OpenSans-Light.ttf</string>
62+
<string>OpenSans-LightItalic.ttf</string>
63+
<string>OpenSans-Medium.ttf</string>
64+
<string>OpenSans-MediumItalic.ttf</string>
65+
<string>OpenSans-Regular.ttf</string>
66+
<string>OpenSans-SemiBold.ttf</string>
67+
<string>OpenSans-SemiBoldItalic.ttf</string>
68+
<string>AntDesign.ttf</string>
69+
<string>Entypo.ttf</string>
70+
<string>EvilIcons.ttf</string>
71+
<string>Feather.ttf</string>
72+
<string>FontAwesome.ttf</string>
73+
<string>FontAwesome5_Brands.ttf</string>
74+
<string>FontAwesome5_Regular.ttf</string>
75+
<string>FontAwesome5_Solid.ttf</string>
76+
<string>Fontisto.ttf</string>
77+
<string>Foundation.ttf</string>
78+
<string>Ionicons.ttf</string>
79+
<string>MaterialCommunityIcons.ttf</string>
80+
<string>MaterialIcons.ttf</string>
81+
<string>Octicons.ttf</string>
82+
<string>SimpleLineIcons.ttf</string>
83+
<string>Zocial.ttf</string>
84+
</array>
8185
</dict>
8286

8387
</plist>

0 commit comments

Comments
 (0)