Create an account

Very important

  • To access the important data of the forums, you must be active in each forum and especially in the leaks and database leaks section, send data and after sending the data and activity, data and important content will be opened and visible for you.
  • You will only see chat messages from people who are at or below your level.
  • More than 500,000 database leaks and millions of account leaks are waiting for you, so access and view with more activity.
  • Many important data are inactive and inaccessible for you, so open them with activity. (This will be done automatically)


Thread Rating:
  • 764 Vote(s) - 3.52 Average
  • 1
  • 2
  • 3
  • 4
  • 5
Programmatically get path to Application Support folder

#1
I'm trying to get an NSString for the user's Application Support folder.

I know I can do `NSString *path = @"~/Library/Application Support";` but this doesn't seem very elegant. I've played around with using `NSSearchPathForDirectoriesInDomains` but it seems to be quite long-winded and creates several unnecessary objects (at least, my implementation of it does).

Is there a simple way to do this?
Reply

#2
iOS 16 update: `URL.applicationSupportDirectory`, they've also added a static property for `documentsDirectory`
Reply

#3
**Swift:**

print(NSHomeDirectory())

or

print(FileManager.default.urls(for: .applicationSupportDirectory, in: .userDomainMask).first)

and

let yourString = String(FileManager.default.urls(for: .applicationSupportDirectory, in: .userDomainMask).first)
Reply

#4
This is outdated, for current best practice use `FileManager.default.urls(for:in:)` as in the comment by [@andyvn22](

[To see links please register here]

) below.

the Best practice is to use `NSSearchPathForDirectoriesInDomains` with `NSApplicationSupportDirectory` as "long winded" as it may be.

Example:

NSArray *paths = NSSearchPathForDirectoriesInDomains(NSApplicationSupportDirectory, NSUserDomainMask, YES);
NSString *applicationSupportDirectory = [paths firstObject];
NSLog(@"applicationSupportDirectory: '%@'", applicationSupportDirectory);

NSLog output:

applicationSupportDirectory: '/Volumes/User/me/Library/Application Support'


Reply

#5
**Swift 3:**

FileManager.default.urls(for: .applicationSupportDirectory, in: .userDomainMask).first
Reply

#6
Create separate objective C class for reading and writing into documents directory. I will avoid code re-writing. Below is my version of it.

//Directory.h
#import <Foundation/Foundation.h>
#import <UIKit/UIKit.h>

#define PATH (NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES))
#define BASEPATH (([PATH count] > 0)? [PATH objectAtIndex:0] : nil)

@interface DocumentsDirectory : NSObject

//Here you can also use URL path as return type and file path.
+(void)removeFilesfromDocumentsDirectory:(NSString*)filename;
+(NSString*)writeFiletoDocumentsDirectory:(NSString*)filename;
@end


#import "Directory.h"

@implementation DocumentsDirectory

UIAlertView *updateAlert;

+(void)removeFilesfromDocumentsDirectory:(NSString*)filename
{
NSFileManager *fileManager = [NSFileManager defaultManager];
NSString *filePath = [BASEPATH stringByAppendingPathComponent:filename];

NSError *error;
BOOL success = [fileManager removeItemAtPath:filePath error:&error]; //Remove or delete file from documents directory.

if (success)
{
updateAlert= [[UIAlertView alloc] initWithTitle:@"Congratulations:" message:@"File is updated successfully" delegate:self cancelButtonTitle:@"OK" otherButtonTitles:nil];
[updateAlert show];
}
else
{
NSLog(@"Could not delete file -:%@ ",[error localizedDescription]);
updateAlert= [[UIAlertView alloc] initWithTitle:@"Try again:" message:[error localizedDescription] delegate:self cancelButtonTitle:@"OK" otherButtonTitles:nil];
[updateAlert show];
}
}

+(NSString*)writeFiletoDocumentsDirectory:(NSString*)filename
{
NSString *foldDestination = BASEPATH;
NSString *filePath = [foldDestination stringByAppendingPathComponent:filename];

return filePath;
}

@end

Reply

#7
This works for me:

NSError *error;
NSURL* appSupportDir = [[NSFileManager defaultManager]
URLForDirectory:NSApplicationSupportDirectory
inDomain:NSUserDomainMask
appropriateForURL:nil
create:YES
error:&error];
Reply

#8
Just to be sure people will start using the recommended way of doing this:

- (NSArray<NSURL *> * _Nonnull)URLsForDirectory:(NSSearchPathDirectory)directory
inDomains:(NSSearchPathDomainMask)domainMask

Expanded example from documentation:

- (NSURL*)applicationDataDirectory {
NSFileManager* sharedFM = [NSFileManager defaultManager];
NSArray* possibleURLs = [sharedFM URLsForDirectory:NSApplicationSupportDirectory
inDomains:NSUserDomainMask];
NSURL* appSupportDir = nil;
NSURL* appDirectory = nil;

if ([possibleURLs count] >= 1) {
// Use the first directory (if multiple are returned)
appSupportDir = [possibleURLs objectAtIndex:0];
}

// If a valid app support directory exists, add the
// app's bundle ID to it to specify the final directory.
if (appSupportDir) {
NSString* appBundleID = [[NSBundle mainBundle] bundleIdentifier];
appDirectory = [appSupportDir URLByAppendingPathComponent:appBundleID];
}

return appDirectory;
}

Proof link:

[To see links please register here]

Reply

#9
This is what I use to get the database. Got it from the Stanford class. It might help somebody.

NSURL *url = [[[NSFileManager URLsForDirectory:NSDocumentDirectory inDomains:NSUserDomainMask] lastObject];
url = [url URLByAppendingPathComponent:@"database_name"];
NSLog(@"Database URL: %@",url);
Reply



Forum Jump:


Users browsing this thread:
1 Guest(s)

©0Day  2016 - 2023 | All Rights Reserved.  Made with    for the community. Connected through