• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright 2017 Google Inc.
3  *
4  * Use of this source code is governed by a BSD-style license that can be
5  * found in the LICENSE file.
6  */
7 
8 #ifndef SkOSFile_ios_DEFINED
9 #define SkOSFile_ios_DEFINED
10 
11 #include "SkString.h"
12 
13 #ifdef SK_BUILD_FOR_IOS
14 #import <CoreFoundation/CoreFoundation.h>
15 
ios_get_path_in_bundle(const char path[],SkString * result)16 static bool ios_get_path_in_bundle(const char path[], SkString* result) {
17     // Get a reference to the main bundle
18     CFBundleRef mainBundle = CFBundleGetMainBundle();
19 
20     // Get a reference to the file's URL
21     CFStringRef pathRef = CFStringCreateWithCString(nullptr, path, kCFStringEncodingUTF8);
22     // We use "data" as our subdirectory to match {{bundle_resources_dir}}/data in GN
23     // Unfortunately "resources" is not a valid top-level name in iOS, so we push it one level down
24     CFURLRef imageURL = CFBundleCopyResourceURL(mainBundle, pathRef, nullptr, CFSTR("data"));
25     CFRelease(pathRef);
26     if (!imageURL) {
27         return false;
28     }
29     if (!result) {
30         return true;
31     }
32 
33     // Convert the URL reference into a string reference
34     CFStringRef imagePath = CFURLCopyFileSystemPath(imageURL, kCFURLPOSIXPathStyle);
35     CFRelease(imageURL);
36 
37     // Get the system encoding method
38     CFStringEncoding encodingMethod = CFStringGetSystemEncoding();
39 
40     // Convert the string reference into an SkString
41     result->set(CFStringGetCStringPtr(imagePath, encodingMethod));
42     return true;
43 }
44 #endif
45 
46 #endif  // SkOSFile_ios_DEFINED
47