Skip to content

Instantly share code, notes, and snippets.

@100ideas
Last active June 8, 2021 16:41
Show Gist options
  • Save 100ideas/444a2253b47f719fd3905dc280248d04 to your computer and use it in GitHub Desktop.
Save 100ideas/444a2253b47f719fd3905dc280248d04 to your computer and use it in GitHub Desktop.
Kapeli Dash.app docset request - 45 Guides ("books") from apple developer archive library

Apple recently "archived" the vast majority of their developer library documentation. Their new dev doc library is available as a docset named 'Apple API Reference' for easy/offline reference in Dash.app. but I couldn't find any user-contributed docsets that included even a subset of the guides in apple's developer.apple.com/library/archive/.

That's too bad, because while many of the documents in the archived library are 5-10 years old, there are also a bunch of documents in the 'Guides' category that are still very relevant and more recent. apple.developer.library.archived.guides.txt is a listing of 26 guides about MacOs data structures, internals, APIs, file system, and other architecture details that are both still recent and also more broadly educational about their topics than the "updated" guides in the new developer library, which generally provide minimal background and focus primarily on specific API methods and parameters. So these old guides are still pretty handy I think.

I found a now-broken go script by @RoCry (attached below, also at https://gist.github.com/RoCry/9657004) written to fetch pdf versions from the old archive. This seemed like a good starting point for figuring out how to automate the creation of a Dash docset for some the apple dev archive. The URL patterns used in @RoCry's script are out of date now that the library has been archived, but it turns out the JSON manifest are still available just at a new location. Unfortunately, the pdf href for each "book" that used to be in the manifest files no longer is present.

But with the updated json manifest scheme and @RoCry's script as a starting point, and the list URLs to still-relevant Guides below, it shouldn't be too difficult to automate the creation of a dash docset for part of the apple developer library archive.

Here are the updated urls for the library.json manifest and an individual book manifest:

curl https://developer.apple.com/library/archive/navigation/library.json > .doc/developer.apple.com.archive.library.json

curl https://developer.apple.com/library/archive/documentation/FileManagement/Conceptual/FileSystemProgrammingGuide/book.json > developer.apple.com.archive.library.FileSystemProgrammingGuide.book.json
https://developer.apple.com/library/archive/documentation/FileManagement/Conceptual/FileSystemProgrammingGuide/FileSystemDetails/FileSystemDetails.html#//apple_ref/doc/uid/TP40010672-CH8-SW1
https://developer.apple.com/library/archive/documentation/FileManagement/Conceptual/FileSystemProgrammingGuide/MacOSXDirectories/MacOSXDirectories.html#//apple_ref/doc/uid/TP40010672-CH10-SW1
https://developer.apple.com/library/archive/documentation/FileManagement/Conceptual/understanding_utis/understand_utis_intro/understand_utis_intro.html#//apple_ref/doc/uid/TP40001319
https://developer.apple.com/library/archive/documentation/DataManagement/Conceptual/DocBasedAppProgrammingGuideForOSX/Introduction/Introduction.html#//apple_ref/doc/uid/TP40011179
https://developer.apple.com/library/archive/documentation/CoreFoundation/Conceptual/CFBundles/DocumentPackages/DocumentPackages.html#//apple_ref/doc/uid/10000123i-CH106
https://developer.apple.com/library/archive/documentation/Cocoa/Conceptual/LoadingResources/Introduction/Introduction.html#//apple_ref/doc/uid/10000051i
https://developer.apple.com/library/archive/documentation/CoreFoundation/Conceptual/CFPropertyLists/CFPropertyLists.html#//apple_ref/doc/uid/10000130i
https://developer.apple.com/library/archive/documentation/Carbon/Conceptual/MetadataIntro/MetadataIntro.html#//apple_ref/doc/uid/TP40001268
https://developer.apple.com/library/archive/documentation/CoreServices/Reference/MetadataAttributesRef/MetadataAttrRef.html#//apple_ref/doc/uid/TP40001689
https://developer.apple.com/library/archive/documentation/General/Reference/InfoPlistKeyReference/Introduction/Introduction.html#//apple_ref/doc/uid/TP40009247
https://developer.apple.com/library/archive/documentation/Carbon/Conceptual/LaunchServicesConcepts/LSCIntro/LSCIntro.html#//apple_ref/doc/uid/TP30000999
https://developer.apple.com/library/archive/documentation/MacOSX/Conceptual/BPSystemStartup/Chapters/Introduction.html#//apple_ref/doc/uid/10000172i
https://developer.apple.com/library/archive/documentation/UserExperience/Conceptual/SearchKitConcepts/searchKit_intro/searchKit_intro.html#//apple_ref/doc/uid/TP40002842-TPXREF101
https://developer.apple.com/library/archive/documentation/Cocoa/Conceptual/NSXML_Concepts/NSXML.html#//apple_ref/doc/uid/TP40001269
https://developer.apple.com/library/archive/documentation/NetworkingInternet/Conceptual/HomeKitDeveloperGuide/Introduction/Introduction.html#//apple_ref/doc/uid/TP40015050
https://developer.apple.com/library/archive/documentation/TextFonts/Conceptual/CocoaTextArchitecture/Introduction/Introduction.html#//apple_ref/doc/uid/TP40009459
https://developer.apple.com/library/archive/documentation/StringsTextFonts/Conceptual/CoreText_Programming/Introduction/Introduction.html#//apple_ref/doc/uid/TP40005533
https://developer.apple.com/library/archive/documentation/NetworkingInternetWeb/Conceptual/NetworkingOverview/Introduction/Introduction.html#//apple_ref/doc/uid/TP40010220
https://developer.apple.com/library/archive/documentation/Performance/Conceptual/ManagingMemory/Articles/FindingLeaks.html#//apple_ref/doc/uid/20001883-SW2
https://developer.apple.com/library/archive/documentation/General/Conceptual/lldb-guide/chapters/Introduction.html#//apple_ref/doc/uid/TP40016717
https://developer.apple.com/library/archive/documentation/Security/Conceptual/CodeSigningGuide/Introduction/Introduction.html#//apple_ref/doc/uid/TP40005929
https://developer.apple.com/library/archive/documentation/Cocoa/Conceptual/DataFormatting/DataFormatting.html#//apple_ref/doc/uid/10000029i
https://developer.apple.com/library/archive/documentation/Cocoa/Conceptual/KeyValueCoding/index.html#//apple_ref/doc/uid/10000107i
https://developer.apple.com/library/archive/documentation/Cocoa/Conceptual/KeyValueObserving/KeyValueObserving.html#//apple_ref/doc/uid/10000177-BCICJDHA
https://developer.apple.com/library/archive/documentation/Cocoa/Conceptual/CoreData/index.html#//apple_ref/doc/uid/TP40001075
https://developer.apple.com/library/archive/featuredarticles/iPhoneURLScheme_Reference/Introduction/Introduction.html#//apple_ref/doc/uid/TP40007899
{
"topics": [
{
"name": "Platforms",
"id": "topic_group_platforms",
"contents": [{
"name": "iOS",
"id": "iOS",
"key": "0"
}, {
"name": "macOS",
"id": "macOS",
"key": "1"
}, {
"name": "watchOS",
"id": "watchOS",
"key": "2"
}, {
"name": "tvOS",
"id": "tvOS",
"key": "3"
}]
}
,
{
"name": "Resource Types",
"id": "topic_group_0",
"contents": [{
"name": "Articles",
"id": "resourceType_12",
"sortOrder": "0",
"key": "12"
}, {
"name": "Getting Started",
"id": "resourceType_9",
"sortOrder": "1",
"key": "9"
}, {
"name": "Guides",
"id": "resourceType_3",
"sortOrder": "2",
"key": "3"
}, {
"name": "Release Notes",
"id": "resourceType_7",
"sortOrder": "3",
"key": "7"
}, {
"name": "Sample Code",
"id": "resourceType_5",
"sortOrder": "4",
"key": "5"
}, {
"name": "Technical Notes",
"id": "resourceType_2",
"sortOrder": "5",
"key": "2"
}, {
"name": "Technical Q&As",
"id": "resourceType_6",
"sortOrder": "6",
"key": "6"
}, {
"name": "Xcode Tasks",
"id": "resourceType_15",
"sortOrder": "7",
"key": "15"
}]
}, {
"documents": [
["siActive Channels Unsupported on Some Power Macs",
"DTS10002170", 6,
"1996-06-01", 0, 0, 0, 17, 0, "../qa/snd/snd03.html#//apple_ref/doc/uid/DTS10002170", 0,
"1996-06-01",
"macOS"
], ["siMonitorSource Selector",
"DTS10002180", 6,
"1998-04-12", 0, 0, 0, 17, 0, "../qa/snd/snd13.html#//apple_ref/doc/uid/DTS10002180", 0,
"1998-04-12",
"macOS"
], ["siOSTypeInput Selectors",
"DTS10002179", 6,
"1998-04-12", 0, 0, 0, 17, 0, "../qa/snd/snd12.html#//apple_ref/doc/uid/DTS10002179", 0,
"1998-04-12",
"macOS"
], ["siOSTypeInputAvailable Format",
"DTS10002176", 6,
"1998-01-16", 0, 0, 0, 17, 0, "../qa/snd/snd09.html#//apple_ref/doc/uid/DTS10002176", 0,
"1998-01-16",
"macOS"
], ["simpleAVC",
"DTS10000441", 5,
"2003-01-14", 0, 1030, 1380, 87, 2480, "../samplecode/simpleAVC/Introduction/Intro.html#//apple_ref/doc/uid/DTS10000441", 0,
"2003-01-14",
"macOS"
], ["simpleJavaLauncher",
"DTS10000688", 5,
"2006-04-12", 2, 800, 0, 87, 1410, "../samplecode/simpleJavaLauncher/Introduction/Intro.html#//apple_ref/doc/uid/DTS10000688", 0,
"2006-04-12",
"macOS"
], ["simpleeditsdi.win",
"DTS10000795", 5,
"2003-01-14", 0, 800, 0, 2, 2550, "../samplecode/simpleeditsdi.win/Introduction/Intro.html#//apple_ref/doc/uid/DTS10000795", 0,
"2003-01-14",
"macOS"
], ["simpleplayersdi.win",
"DTS10000796", 5,
"2003-01-14", 0, 800, 0, 2, 2550, "../samplecode/simpleplayersdi.win/Introduction/Intro.html#//apple_ref/doc/uid/DTS10000796", 0,
"2003-01-14",
"macOS"
], ["sndequalizer",
"DTS10000918", 5,
"2003-01-14", 0, 0, 1970, 87, 0, "../samplecode/sndequalizer/Introduction/Intro.html#//apple_ref/doc/uid/DTS10000918", 0,
"2003-01-14",
"macOS"
], ["softvdig",
"DTS10000334", 5,
"2003-08-29", 0, 0, 0, 2, 0, "../samplecode/softvdig/Introduction/Intro.html#//apple_ref/doc/uid/DTS10000334", 0,
"2003-08-29",
"macOS"
], ["softvdig.win",
"DTS10000335", 5,
"2003-08-29", 0, 0, 0, 2, 0, "../samplecode/softvdig.win/Introduction/Intro.html#//apple_ref/doc/uid/DTS10000335", 0,
"2003-08-29",
"macOS"
], ["soundconverter",
"DTS10000920", 5,
"2003-01-14", 0, 0, 1970, 87, 0, "../samplecode/soundconverter/Introduction/Intro.html#//apple_ref/doc/uid/DTS10000920", 0,
"2003-01-14",
"macOS"
], ["soundconverter.win",
"DTS10000921", 5,
"2003-01-14", 0, 0, 1970, 2, 0, "../samplecode/soundconverter.win/Introduction/Intro.html#//apple_ref/doc/uid/DTS10000921", 0,
"2003-01-14",
"macOS"
], ["soundsnippets",
"DTS10000924", 5,
"2003-10-27", 0, 0, 1970, 87, 0, "../samplecode/soundsnippets/Introduction/Intro.html#//apple_ref/doc/uid/DTS10000924", 0,
"2003-10-27",
"macOS"
], ["soundsnippets.win",
"DTS10000925", 5,
"2003-10-27", 0, 800, 0, 3, 2550, "../samplecode/soundsnippets.win/Introduction/Intro.html#//apple_ref/doc/uid/DTS10000925", 0,
"2003-10-27",
"macOS"
], ["spatialQuality Values with Lossy Compression",
"DTS10001674", 6,
"2011-07-12", 2, 0, 1970, 18, 0, "../qa/qa2001/qa1126.html#//apple_ref/doc/uid/DTS10001674", 0,
"2011-07-12",
"macOS"
], ["stdFilterHacking",
"DTS10000619", 5,
"2003-01-30", 0, 0, 0, 2, 0, "../samplecode/stdFilterHacking/Introduction/Intro.html#//apple_ref/doc/uid/DTS10000619", 0,
"2003-01-30",
"macOS"
], ["tcplognke",
"DTS10003669", 5,
"2006-11-27", 1, 1030, 1430, 87, 1635, "../samplecode/tcplognke/Introduction/Intro.html#//apple_ref/doc/uid/DTS10003669", 0,
"2006-11-27",
"macOS"
]
]
}
]
};
// OUTDATED Download Guides Pdf from https://developer.apple.com/library/ios/navigation/#section=Resource%20Types&topic=Guides
// author: RoCry
// repo: https://gist.github.com/RoCry/9657004
package main
import (
"encoding/json"
"fmt"
"log"
"net/http"
"net/url"
"os/exec"
"strconv"
"strings"
"github.com/jmoiron/jsonq"
)
func main() {
resp, err := http.Get("https://developer.apple.com/library/ios/navigation/library.json")
PanicIfError(err)
defer resp.Body.Close()
data := map[string]interface{}{}
dec := json.NewDecoder(resp.Body)
dec.Decode(&data)
jq := jsonq.NewQuery(data)
// get guides' key
contents, err := jq.ArrayOfObjects("topics", "0", "contents")
PanicIfError(err)
var guideKey int
for _, v := range contents {
name := v["name"]
if name == "Guides" {
keyStr := v["key"].(string)
guideKey, err = strconv.Atoi(keyStr)
PanicIfError(err)
break
}
}
// assmenble url
basePath := "https://developer.apple.com/library/ios"
documents, err := jq.ArrayOfArrays("documents")
var guideDocPaths []string
for _, v := range documents {
key := v[2].(float64)
if int(key) == guideKey {
relativePath := v[9].(string)
if relativePath[0:3] != "../" {
fmt.Println("maybe some error at:", relativePath)
continue
}
relativePath = relativePath[2:len(relativePath)]
path := basePath + relativePath
guideDocPaths = append(guideDocPaths, path)
// fmt.Println(path)
}
}
// fmt.Println("first guide path:", guideDocPaths[0])
fmt.Println("library json loaded")
downloadPdf(guideDocPaths)
}
func downloadPdf(guideDocPaths []string) {
// download pdf
// https://developer.apple.com/library/ios/documentation/Performance/Conceptual/ManagingMemory/book.json
// https://developer.apple.com/library/ios/documentation/General/Conceptual/CocoaTouch64BitGuide/book.json
downloadedFileNames := make(chan string, len(guideDocPaths))
workers := make(chan bool, 10)
for _, v := range guideDocPaths {
workers <- true
go func(guideDocPath string) {
fmt.Println("begin parse:", guideDocPath)
u, err := url.Parse(guideDocPath)
PanicIfError(err)
oldPath := u.Path
u.Fragment = ""
// get book.json
// /library/ios/documentation/General/Conceptual/CocoaTouch64BitGuide/Introduction/Introduction.html
// =>>>
// /library/ios/documentation/General/Conceptual/CocoaTouch64BitGuide/book.json
oldComps := strings.Split(oldPath, "/")
lastNeededCompIndex := len(oldComps) - 1
TryGetBookJSON:
newComps := oldComps[0:lastNeededCompIndex]
u.Path = strings.Join(newComps, "/") + "/book.json"
bookFullPath := u.String()
// get Pdf file name and download link
resp, err := http.Get(bookFullPath)
PanicIfError(err)
defer resp.Body.Close()
if resp.StatusCode != 200 {
lastNeededCompIndex--
if lastNeededCompIndex >= 0 {
goto TryGetBookJSON
} else {
fmt.Println("ERROR:", err, "oldPath:", oldPath)
releaseWorkerAndFileNames(downloadedFileNames, workers)
return
}
}
data := map[string]interface{}{}
dec := json.NewDecoder(resp.Body)
dec.Decode(&data)
jq := jsonq.NewQuery(data)
// fmt.Println("begin find pdf link for:", bookFullPath)
pdfName, err := jq.String("PDF", "href")
if err != nil {
fmt.Println("find pdf href err:", err, " bookFullPath:", bookFullPath)
releaseWorkerAndFileNames(downloadedFileNames, workers)
return
}
// fmt.Println("pdfName:::", pdfName)
pdfPath := strings.Join(newComps, "/") + "/" + pdfName
u.Path = pdfPath
pdfFullPath := u.String()
// fmt.Println("pdfFullPath:::", pdfFullPath)
// download it
fmt.Println("begin download:", pdfFullPath)
cmd := exec.Command("curl", pdfFullPath, "-o", pdfName)
// var out bytes.Buffer
// cmd.Stdout = &out
// cmd.Stderr = &out
err = cmd.Run()
if err != nil {
fmt.Println("download pdf err:", err, " pdfFullPath:", pdfFullPath)
releaseWorkerAndFileNames(downloadedFileNames, workers)
return
}
downloadedFileNames <- pdfName
<-workers
return
}(v)
}
for i := 0; i < len(guideDocPaths); i++ {
<-downloadedFileNames
}
fmt.Println("----------DONE----------")
}
func releaseWorkerAndFileNames(downloadedFileNames chan string, workers chan bool) {
<-workers
downloadedFileNames <- "DOWNLOAD FILE ERROR!!"
}
func PanicIfError(err error) {
if err != nil {
log.Fatal(err)
}
}
{
"version": "4.4.6",
"needsAdditionalLinksSeparator": false,
"type": "Conceptual Flow",
"relatedBooks": [],
"technology": "Data Management: File Management",
"title": "File System Programming Guide",
"assignments": [
"Type/Guide",
"Topic/Data Management/File Management"
],
"sections": [
{
"title": "Introduction",
"href": "Introduction/Introduction.html#//apple_ref/doc/uid/TP40010672-CH1-SW1",
"aref": "//apple_ref/doc/uid/TP40010672-CH1-SW1"
},
{
"title": "File System Basics",
"href": "FileSystemOverview/FileSystemOverview.html#//apple_ref/doc/uid/TP40010672-CH2-SW2",
"aref": "//apple_ref/doc/uid/TP40010672-CH2-SW2",
"sections": [
{
"sections": [
{
"sections": [],
"title": "iOS Standard Directories: Where Files Reside",
"aref": "//apple_ref/doc/uid/TP40010672-CH2-SW13",
"href": "FileSystemOverview/FileSystemOverview.html#//apple_ref/doc/uid/TP40010672-CH2-SW13",
"type": "section"
},
{
"aref": "//apple_ref/doc/uid/TP40010672-CH2-SW28",
"title": "Where You Should Put Your App’s Files",
"href": "FileSystemOverview/FileSystemOverview.html#//apple_ref/doc/uid/TP40010672-CH2-SW28",
"sections": [],
"type": "section"
}
],
"href": "FileSystemOverview/FileSystemOverview.html#//apple_ref/doc/uid/TP40010672-CH2-SW12",
"title": "About the iOS File System",
"aref": "//apple_ref/doc/uid/TP40010672-CH2-SW12",
"type": "section"
},
{
"title": "About the macOS File System",
"href": "FileSystemOverview/FileSystemOverview.html#//apple_ref/doc/uid/TP40010672-CH2-SW14",
"aref": "//apple_ref/doc/uid/TP40010672-CH2-SW14",
"sections": [
{
"title": "Domains Determine the Placement of Files",
"aref": "//apple_ref/doc/uid/TP40010672-CH2-SW15",
"href": "FileSystemOverview/FileSystemOverview.html#//apple_ref/doc/uid/TP40010672-CH2-SW15",
"sections": [],
"type": "section"
},
{
"type": "section",
"sections": [],
"title": "macOS Standard Directories: Where Files Reside",
"aref": "//apple_ref/doc/uid/TP40010672-CH2-SW6",
"href": "FileSystemOverview/FileSystemOverview.html#//apple_ref/doc/uid/TP40010672-CH2-SW6"
},
{
"type": "section",
"aref": "//apple_ref/doc/uid/TP40010672-CH2-SW26",
"title": "Sandboxed macOS App File Containers",
"href": "FileSystemOverview/FileSystemOverview.html#//apple_ref/doc/uid/TP40010672-CH2-SW26",
"sections": []
},
{
"type": "section",
"aref": "//apple_ref/doc/uid/TP40010672-CH2-SW7",
"title": "Hidden Files and Directories: Simplifying the User Experience",
"href": "FileSystemOverview/FileSystemOverview.html#//apple_ref/doc/uid/TP40010672-CH2-SW7",
"sections": []
},
{
"sections": [],
"href": "FileSystemOverview/FileSystemOverview.html#//apple_ref/doc/uid/TP40010672-CH2-SW10",
"title": "Files and Directories Can Have Alternate Names",
"aref": "//apple_ref/doc/uid/TP40010672-CH2-SW10",
"type": "section"
},
{
"href": "FileSystemOverview/FileSystemOverview.html#//apple_ref/doc/uid/TP40010672-CH2-SW1",
"title": "The Library Directory Stores App-Specific Files",
"aref": "//apple_ref/doc/uid/TP40010672-CH2-SW1",
"sections": [],
"type": "section"
}
],
"type": "section"
},
{
"title": "The iCloud File Storage Container",
"aref": "//apple_ref/doc/uid/TP40010672-CH2-SW27",
"href": "FileSystemOverview/FileSystemOverview.html#//apple_ref/doc/uid/TP40010672-CH2-SW27",
"sections": [],
"type": "section"
},
{
"type": "section",
"sections": [],
"title": "How the System Identifies the Type of Content in a File",
"href": "FileSystemOverview/FileSystemOverview.html#//apple_ref/doc/uid/TP40010672-CH2-SW16",
"aref": "//apple_ref/doc/uid/TP40010672-CH2-SW16"
},
{
"aref": "//apple_ref/doc/uid/TP40010672-CH2-SW18",
"title": "Security: Protect the Files You Create",
"href": "FileSystemOverview/FileSystemOverview.html#//apple_ref/doc/uid/TP40010672-CH2-SW18",
"sections": [
{
"type": "section",
"title": "Sandboxes Limit the Spread of Damage",
"href": "FileSystemOverview/FileSystemOverview.html#//apple_ref/doc/uid/TP40010672-CH2-SW19",
"aref": "//apple_ref/doc/uid/TP40010672-CH2-SW19",
"sections": []
},
{
"sections": [],
"title": "Permissions and Access Control Lists Govern All Access to Files",
"href": "FileSystemOverview/FileSystemOverview.html#//apple_ref/doc/uid/TP40010672-CH2-SW20",
"aref": "//apple_ref/doc/uid/TP40010672-CH2-SW20",
"type": "section"
},
{
"sections": [],
"href": "FileSystemOverview/FileSystemOverview.html#//apple_ref/doc/uid/TP40010672-CH2-SW21",
"title": "Files Can Be Encrypted On Disk",
"aref": "//apple_ref/doc/uid/TP40010672-CH2-SW21",
"type": "section"
}
],
"type": "section"
},
{
"href": "FileSystemOverview/FileSystemOverview.html#//apple_ref/doc/uid/TP40010672-CH2-SW22",
"title": "Synchronization Ensures Robustness in Your File-Related Code",
"aref": "//apple_ref/doc/uid/TP40010672-CH2-SW22",
"sections": [],
"type": "section"
},
{
"type": "section",
"sections": [],
"aref": "//apple_ref/doc/uid/TP40010672-CH2-SW24",
"title": "Files, Concurrency, and Thread Safety",
"href": "FileSystemOverview/FileSystemOverview.html#//apple_ref/doc/uid/TP40010672-CH2-SW24"
}
],
"type": "chapter",
"isPart": false
},
{
"type": "chapter",
"isPart": false,
"href": "AccessingFilesandDirectories/AccessingFilesandDirectories.html#//apple_ref/doc/uid/TP40010672-CH3-SW1",
"title": "Accessing Files and Directories",
"aref": "//apple_ref/doc/uid/TP40010672-CH3-SW1",
"sections": [
{
"href": "AccessingFilesandDirectories/AccessingFilesandDirectories.html#//apple_ref/doc/uid/TP40010672-CH3-SW5",
"title": "Choose the Right Way to Access Files",
"aref": "//apple_ref/doc/uid/TP40010672-CH3-SW5",
"sections": [
{
"type": "section",
"sections": [],
"aref": "//apple_ref/doc/uid/TP40010672-CH3-SW6",
"title": "Specifying the Path to a File or Directory",
"href": "AccessingFilesandDirectories/AccessingFilesandDirectories.html#//apple_ref/doc/uid/TP40010672-CH3-SW6"
}
],
"type": "section"
},
{
"type": "section",
"title": "Locating Items in the File System",
"aref": "//apple_ref/doc/uid/TP40010672-CH3-SW7",
"href": "AccessingFilesandDirectories/AccessingFilesandDirectories.html#//apple_ref/doc/uid/TP40010672-CH3-SW7",
"sections": [
{
"type": "section",
"sections": [],
"aref": "//apple_ref/doc/uid/TP40010672-CH3-SW8",
"title": "Asking the User to Locate an Item",
"href": "AccessingFilesandDirectories/AccessingFilesandDirectories.html#//apple_ref/doc/uid/TP40010672-CH3-SW8"
},
{
"title": "Locating Items in Your App Bundle",
"aref": "//apple_ref/doc/uid/TP40010672-CH3-SW9",
"href": "AccessingFilesandDirectories/AccessingFilesandDirectories.html#//apple_ref/doc/uid/TP40010672-CH3-SW9",
"sections": [],
"type": "section"
},
{
"type": "section",
"sections": [],
"title": "Locating Items in the Standard Directories",
"href": "AccessingFilesandDirectories/AccessingFilesandDirectories.html#//apple_ref/doc/uid/TP40010672-CH3-SW3",
"aref": "//apple_ref/doc/uid/TP40010672-CH3-SW3"
},
{
"type": "section",
"href": "AccessingFilesandDirectories/AccessingFilesandDirectories.html#//apple_ref/doc/uid/TP40010672-CH3-SW10",
"title": "Locating Files Using Bookmarks",
"aref": "//apple_ref/doc/uid/TP40010672-CH3-SW10",
"sections": []
}
]
},
{
"type": "section",
"sections": [
{
"type": "section",
"aref": "//apple_ref/doc/uid/TP40010672-CH3-SW26",
"title": "Enumerating a Directory One File at a Time",
"href": "AccessingFilesandDirectories/AccessingFilesandDirectories.html#//apple_ref/doc/uid/TP40010672-CH3-SW26",
"sections": []
},
{
"type": "section",
"sections": [],
"href": "AccessingFilesandDirectories/AccessingFilesandDirectories.html#//apple_ref/doc/uid/TP40010672-CH3-SW27",
"title": "Getting the Contents of a Directory in a Single Batch Operation",
"aref": "//apple_ref/doc/uid/TP40010672-CH3-SW27"
}
],
"title": "Enumerating the Contents of a Directory",
"href": "AccessingFilesandDirectories/AccessingFilesandDirectories.html#//apple_ref/doc/uid/TP40010672-CH3-SW25",
"aref": "//apple_ref/doc/uid/TP40010672-CH3-SW25"
},
{
"type": "section",
"href": "AccessingFilesandDirectories/AccessingFilesandDirectories.html#//apple_ref/doc/uid/TP40010672-CH3-SW11",
"title": "Determining Where to Store Your App-Specific Files",
"aref": "//apple_ref/doc/uid/TP40010672-CH3-SW11",
"sections": []
},
{
"sections": [
{
"href": "AccessingFilesandDirectories/AccessingFilesandDirectories.html#//apple_ref/doc/uid/TP40010672-CH3-SW13",
"title": "Perform File Operations Lazily",
"aref": "//apple_ref/doc/uid/TP40010672-CH3-SW13",
"sections": [],
"type": "section"
},
{
"sections": [],
"title": "Use Secure Coding Practices",
"aref": "//apple_ref/doc/uid/TP40010672-CH3-SW15",
"href": "AccessingFilesandDirectories/AccessingFilesandDirectories.html#//apple_ref/doc/uid/TP40010672-CH3-SW15",
"type": "section"
},
{
"type": "section",
"sections": [],
"aref": "//apple_ref/doc/uid/TP40010672-CH3-SW16",
"title": "Assume Case Sensitivity for Paths",
"href": "AccessingFilesandDirectories/AccessingFilesandDirectories.html#//apple_ref/doc/uid/TP40010672-CH3-SW16"
},
{
"type": "section",
"href": "AccessingFilesandDirectories/AccessingFilesandDirectories.html#//apple_ref/doc/uid/TP40010672-CH3-SW17",
"title": "Include Filename Extensions for New Files",
"aref": "//apple_ref/doc/uid/TP40010672-CH3-SW17",
"sections": []
},
{
"type": "section",
"href": "AccessingFilesandDirectories/AccessingFilesandDirectories.html#//apple_ref/doc/uid/TP40010672-CH3-SW18",
"title": "Use Display Names When Presenting Items",
"aref": "//apple_ref/doc/uid/TP40010672-CH3-SW18",
"sections": []
},
{
"sections": [],
"aref": "//apple_ref/doc/uid/TP40010672-CH3-SW19",
"title": "Accessing Files Safely from Background Threads",
"href": "AccessingFilesandDirectories/AccessingFilesandDirectories.html#//apple_ref/doc/uid/TP40010672-CH3-SW19",
"type": "section"
}
],
"aref": "//apple_ref/doc/uid/TP40010672-CH3-SW12",
"title": "Tips for Accessing Files and Directories",
"href": "AccessingFilesandDirectories/AccessingFilesandDirectories.html#//apple_ref/doc/uid/TP40010672-CH3-SW12",
"type": "section"
}
]
},
{
"type": "chapter",
"isPart": false,
"aref": "//apple_ref/doc/uid/TP40010672-CH11-SW1",
"title": "The Role of File Coordinators and Presenters",
"href": "FileCoordinators/FileCoordinators.html#//apple_ref/doc/uid/TP40010672-CH11-SW1",
"sections": [
{
"title": "Using NSDocument and UIDocument to Handle File Coordinators and Presenters",
"href": "FileCoordinators/FileCoordinators.html#//apple_ref/doc/uid/TP40010672-CH11-SW2",
"aref": "//apple_ref/doc/uid/TP40010672-CH11-SW2",
"sections": [],
"type": "section"
},
{
"aref": "//apple_ref/doc/uid/TP40010672-CH11-SW3",
"title": "Ensuring Safe Read and Write Operations Using File Coordinators",
"href": "FileCoordinators/FileCoordinators.html#//apple_ref/doc/uid/TP40010672-CH11-SW3",
"sections": [
{
"type": "section",
"sections": [],
"title": "Choosing Which Files to Monitor with File Presenters",
"aref": "//apple_ref/doc/uid/TP40010672-CH11-SW4",
"href": "FileCoordinators/FileCoordinators.html#//apple_ref/doc/uid/TP40010672-CH11-SW4"
},
{
"type": "section",
"aref": "//apple_ref/doc/uid/TP40010672-CH11-SW5",
"title": "Implementing Your File Presenter Objects",
"href": "FileCoordinators/FileCoordinators.html#//apple_ref/doc/uid/TP40010672-CH11-SW5",
"sections": []
},
{
"sections": [],
"title": "Registering File Presenters with the System",
"aref": "//apple_ref/doc/uid/TP40010672-CH11-SW6",
"href": "FileCoordinators/FileCoordinators.html#//apple_ref/doc/uid/TP40010672-CH11-SW6",
"type": "section"
},
{
"type": "section",
"sections": [],
"title": "Initiating File Changes with a File Coordinator",
"href": "FileCoordinators/FileCoordinators.html#//apple_ref/doc/uid/TP40010672-CH11-SW7",
"aref": "//apple_ref/doc/uid/TP40010672-CH11-SW7"
}
],
"type": "section"
}
]
},
{
"type": "chapter",
"isPart": false,
"title": "iCloud File Management",
"href": "iCloud/iCloud.html#//apple_ref/doc/uid/TP40010672-CH12-SW1",
"aref": "//apple_ref/doc/uid/TP40010672-CH12-SW1",
"sections": [
{
"type": "section",
"sections": [],
"aref": "//apple_ref/doc/uid/TP40010672-CH12-SW47",
"title": "Storing and Using Documents in iCloud",
"href": "iCloud/iCloud.html#//apple_ref/doc/uid/TP40010672-CH12-SW47"
},
{
"title": "iCloud Storage APIs",
"href": "iCloud/iCloud.html#//apple_ref/doc/uid/TP40010672-CH12-SW46",
"aref": "//apple_ref/doc/uid/TP40010672-CH12-SW46",
"sections": [],
"type": "section"
},
{
"title": "Working with Documents in iCloud",
"aref": "//apple_ref/doc/uid/TP40010672-CH12-SW51",
"href": "iCloud/iCloud.html#//apple_ref/doc/uid/TP40010672-CH12-SW51",
"sections": [],
"type": "section"
},
{
"href": "iCloud/iCloud.html#//apple_ref/doc/uid/TP40010672-CH12-SW49",
"title": "Moving a Document to iCloud Storage",
"aref": "//apple_ref/doc/uid/TP40010672-CH12-SW49",
"sections": [],
"type": "section"
},
{
"title": "Searching for Documents in iCloud",
"href": "iCloud/iCloud.html#//apple_ref/doc/uid/TP40010672-CH12-SW50",
"aref": "//apple_ref/doc/uid/TP40010672-CH12-SW50",
"sections": [],
"type": "section"
},
{
"sections": [],
"aref": "//apple_ref/doc/uid/TP40010672-CH12-SW3",
"title": "Working with File Wrappers",
"href": "iCloud/iCloud.html#//apple_ref/doc/uid/TP40010672-CH12-SW3",
"type": "section"
},
{
"type": "section",
"title": "Handling File-Version Conflicts",
"aref": "//apple_ref/doc/uid/TP40010672-CH12-SW52",
"href": "iCloud/iCloud.html#//apple_ref/doc/uid/TP40010672-CH12-SW52",
"sections": []
},
{
"type": "section",
"sections": [],
"title": "Using iCloud Storage Responsibly",
"href": "iCloud/iCloud.html#//apple_ref/doc/uid/TP40010672-CH12-SW57",
"aref": "//apple_ref/doc/uid/TP40010672-CH12-SW57"
}
]
},
{
"type": "chapter",
"isPart": false,
"href": "UsingtheOpenandSavePanels/UsingtheOpenandSavePanels.html#//apple_ref/doc/uid/TP40010672-CH4-SW1",
"title": "Using the Open and Save Panels",
"aref": "//apple_ref/doc/uid/TP40010672-CH4-SW1",
"sections": [
{
"type": "section",
"title": "The Open Panel: Getting Existing Files or Directories",
"href": "UsingtheOpenandSavePanels/UsingtheOpenandSavePanels.html#//apple_ref/doc/uid/TP40010672-CH4-SW3",
"aref": "//apple_ref/doc/uid/TP40010672-CH4-SW3",
"sections": [
{
"type": "section",
"sections": [],
"title": "Opening User Documents That You Plan to Display in a New Window",
"href": "UsingtheOpenandSavePanels/UsingtheOpenandSavePanels.html#//apple_ref/doc/uid/TP40010672-CH4-SW4",
"aref": "//apple_ref/doc/uid/TP40010672-CH4-SW4"
},
{
"title": "Choosing Files and Directories for an Already Open Window",
"aref": "//apple_ref/doc/uid/TP40010672-CH4-SW5",
"href": "UsingtheOpenandSavePanels/UsingtheOpenandSavePanels.html#//apple_ref/doc/uid/TP40010672-CH4-SW5",
"sections": [],
"type": "section"
}
]
},
{
"aref": "//apple_ref/doc/uid/TP40010672-CH4-SW7",
"title": "The Save Panel: Getting a New Filename",
"href": "UsingtheOpenandSavePanels/UsingtheOpenandSavePanels.html#//apple_ref/doc/uid/TP40010672-CH4-SW7",
"sections": [],
"type": "section"
},
{
"type": "section",
"href": "UsingtheOpenandSavePanels/UsingtheOpenandSavePanels.html#//apple_ref/doc/uid/TP40010672-CH4-SW6",
"title": "Using Filters to Limit the File Types That the User Can Select",
"aref": "//apple_ref/doc/uid/TP40010672-CH4-SW6",
"sections": []
},
{
"type": "section",
"title": "Adding an Accessory View to the Open and Save Panels",
"href": "UsingtheOpenandSavePanels/UsingtheOpenandSavePanels.html#//apple_ref/doc/uid/TP40010672-CH4-SW8",
"aref": "//apple_ref/doc/uid/TP40010672-CH4-SW8",
"sections": [
{
"sections": [],
"title": "Defining the Contents of Your Accessory View",
"href": "UsingtheOpenandSavePanels/UsingtheOpenandSavePanels.html#//apple_ref/doc/uid/TP40010672-CH4-SW13",
"aref": "//apple_ref/doc/uid/TP40010672-CH4-SW13",
"type": "section"
},
{
"type": "section",
"sections": [],
"title": "Loading and Configuring Your Accessory View at Runtime",
"href": "UsingtheOpenandSavePanels/UsingtheOpenandSavePanels.html#//apple_ref/doc/uid/TP40010672-CH4-SW14",
"aref": "//apple_ref/doc/uid/TP40010672-CH4-SW14"
}
]
}
]
},
{
"sections": [
{
"type": "section",
"title": "Creating New Files and Directories Programmatically",
"href": "ManagingFIlesandDirectories/ManagingFIlesandDirectories.html#//apple_ref/doc/uid/TP40010672-CH6-SW2",
"aref": "//apple_ref/doc/uid/TP40010672-CH6-SW2",
"sections": [
{
"type": "section",
"sections": [],
"href": "ManagingFIlesandDirectories/ManagingFIlesandDirectories.html#//apple_ref/doc/uid/TP40010672-CH6-SW3",
"title": "Creating Directories",
"aref": "//apple_ref/doc/uid/TP40010672-CH6-SW3"
},
{
"sections": [],
"aref": "//apple_ref/doc/uid/TP40010672-CH6-SW4",
"title": "Creating New Files",
"href": "ManagingFIlesandDirectories/ManagingFIlesandDirectories.html#//apple_ref/doc/uid/TP40010672-CH6-SW4",
"type": "section"
}
]
},
{
"href": "ManagingFIlesandDirectories/ManagingFIlesandDirectories.html#//apple_ref/doc/uid/TP40010672-CH6-SW10",
"title": "Copying and Moving Files and Directories",
"aref": "//apple_ref/doc/uid/TP40010672-CH6-SW10",
"sections": [],
"type": "section"
},
{
"type": "section",
"aref": "//apple_ref/doc/uid/TP40010672-CH6-SW11",
"title": "Deleting Files and Directories",
"href": "ManagingFIlesandDirectories/ManagingFIlesandDirectories.html#//apple_ref/doc/uid/TP40010672-CH6-SW11",
"sections": []
},
{
"type": "section",
"title": "Creating and Handling Invisible Files",
"href": "ManagingFIlesandDirectories/ManagingFIlesandDirectories.html#//apple_ref/doc/uid/TP40010672-CH6-SW12",
"aref": "//apple_ref/doc/uid/TP40010672-CH6-SW12",
"sections": []
}
],
"href": "ManagingFIlesandDirectories/ManagingFIlesandDirectories.html#//apple_ref/doc/uid/TP40010672-CH6-SW1",
"title": "Managing Files and Directories",
"aref": "//apple_ref/doc/uid/TP40010672-CH6-SW1",
"isPart": false,
"type": "chapter"
},
{
"title": "Techniques for Reading and Writing Files Without File Coordinators",
"href": "TechniquesforReadingandWritingCustomFiles/TechniquesforReadingandWritingCustomFiles.html#//apple_ref/doc/uid/TP40010672-CH5-SW1",
"aref": "//apple_ref/doc/uid/TP40010672-CH5-SW1",
"sections": [
{
"title": "Reading and Writing Files Asynchronously",
"aref": "//apple_ref/doc/uid/TP40010672-CH5-SW3",
"href": "TechniquesforReadingandWritingCustomFiles/TechniquesforReadingandWritingCustomFiles.html#//apple_ref/doc/uid/TP40010672-CH5-SW3",
"sections": [
{
"aref": "//apple_ref/doc/uid/TP40010672-CH5-SW6",
"title": "Processing an Entire File Linearly Using Streams",
"href": "TechniquesforReadingandWritingCustomFiles/TechniquesforReadingandWritingCustomFiles.html#//apple_ref/doc/uid/TP40010672-CH5-SW6",
"sections": [],
"type": "section"
},
{
"aref": "//apple_ref/doc/uid/TP40010672-CH5-SW8",
"title": "Processing a File Using GCD",
"href": "TechniquesforReadingandWritingCustomFiles/TechniquesforReadingandWritingCustomFiles.html#//apple_ref/doc/uid/TP40010672-CH5-SW8",
"sections": [
{
"title": "Creating and Using a Dispatch I/O Channel",
"aref": "//apple_ref/doc/uid/TP40010672-CH5-SW10",
"href": "TechniquesforReadingandWritingCustomFiles/TechniquesforReadingandWritingCustomFiles.html#//apple_ref/doc/uid/TP40010672-CH5-SW10",
"sections": [],
"type": "section"
},
{
"type": "section",
"href": "TechniquesforReadingandWritingCustomFiles/TechniquesforReadingandWritingCustomFiles.html#//apple_ref/doc/uid/TP40010672-CH5-SW11",
"title": "Manipulating Dispatch Data for an I/O Channel",
"aref": "//apple_ref/doc/uid/TP40010672-CH5-SW11",
"sections": []
}
],
"type": "section"
}
],
"type": "section"
},
{
"href": "TechniquesforReadingandWritingCustomFiles/TechniquesforReadingandWritingCustomFiles.html#//apple_ref/doc/uid/TP40010672-CH5-SW4",
"title": "Reading and Writing Files Synchronously",
"aref": "//apple_ref/doc/uid/TP40010672-CH5-SW4",
"sections": [
{
"type": "section",
"title": "Building Your Content in Memory and Writing It to Disk All at Once",
"aref": "//apple_ref/doc/uid/TP40010672-CH5-SW5",
"href": "TechniquesforReadingandWritingCustomFiles/TechniquesforReadingandWritingCustomFiles.html#//apple_ref/doc/uid/TP40010672-CH5-SW5",
"sections": []
},
{
"type": "section",
"sections": [],
"title": "Reading and Writing Files Using NSFileHandle",
"href": "TechniquesforReadingandWritingCustomFiles/TechniquesforReadingandWritingCustomFiles.html#//apple_ref/doc/uid/TP40010672-CH5-SW12",
"aref": "//apple_ref/doc/uid/TP40010672-CH5-SW12"
},
{
"sections": [],
"href": "TechniquesforReadingandWritingCustomFiles/TechniquesforReadingandWritingCustomFiles.html#//apple_ref/doc/uid/TP40010672-CH5-SW7",
"title": "Managing Disk Reads and Writes at the POSIX Level",
"aref": "//apple_ref/doc/uid/TP40010672-CH5-SW7",
"type": "section"
}
],
"type": "section"
},
{
"href": "TechniquesforReadingandWritingCustomFiles/TechniquesforReadingandWritingCustomFiles.html#//apple_ref/doc/uid/TP40010672-CH5-SW9",
"title": "Getting and Setting File Metadata Information",
"aref": "//apple_ref/doc/uid/TP40010672-CH5-SW9",
"sections": [],
"type": "section"
}
],
"type": "chapter",
"isPart": false
},
{
"sections": [
{
"type": "section",
"title": "Using File Wrappers in Cocoa Documents",
"href": "FileWrappers/FileWrappers.html#//apple_ref/doc/uid/TP40010672-CH13-SW4",
"aref": "//apple_ref/doc/uid/TP40010672-CH13-SW4",
"sections": [
{
"title": "Managing a Document Package in Your Document Subclass",
"href": "FileWrappers/FileWrappers.html#//apple_ref/doc/uid/TP40010672-CH13-DontLinkElementID_1",
"aref": "//apple_ref/doc/uid/TP40010672-CH13-DontLinkElementID_1",
"sections": [],
"type": "section"
},
{
"title": "Traversing the File Wrapper Hierarchy When Opening a Document",
"aref": "//apple_ref/doc/uid/TP40010672-CH13-DontLinkElementID_2",
"href": "FileWrappers/FileWrappers.html#//apple_ref/doc/uid/TP40010672-CH13-DontLinkElementID_2",
"sections": [],
"type": "section"
},
{
"sections": [],
"aref": "//apple_ref/doc/uid/TP40010672-CH13-DontLinkElementID_3",
"title": "Invalidating File Wrappers When the Model Changes",
"href": "FileWrappers/FileWrappers.html#//apple_ref/doc/uid/TP40010672-CH13-DontLinkElementID_3",
"type": "section"
},
{
"type": "section",
"sections": [],
"title": "Populating Missing File Wrappers During a Save",
"aref": "//apple_ref/doc/uid/TP40010672-CH13-DontLinkElementID_4",
"href": "FileWrappers/FileWrappers.html#//apple_ref/doc/uid/TP40010672-CH13-DontLinkElementID_4"
}
]
},
{
"title": "Using File Wrappers Directly",
"aref": "//apple_ref/doc/uid/TP40010672-CH13-DontLinkElementID_5",
"href": "FileWrappers/FileWrappers.html#//apple_ref/doc/uid/TP40010672-CH13-DontLinkElementID_5",
"sections": [
{
"type": "section",
"sections": [],
"title": "Reading a File Wrapper",
"href": "FileWrappers/FileWrappers.html#//apple_ref/doc/uid/TP40010672-CH13-DontLinkElementID_6",
"aref": "//apple_ref/doc/uid/TP40010672-CH13-DontLinkElementID_6"
},
{
"href": "FileWrappers/FileWrappers.html#//apple_ref/doc/uid/TP40010672-CH13-DontLinkElementID_7",
"title": "Writing a File Wrapper",
"aref": "//apple_ref/doc/uid/TP40010672-CH13-DontLinkElementID_7",
"sections": [],
"type": "section"
},
{
"type": "section",
"sections": [],
"title": "File Coordination",
"href": "FileWrappers/FileWrappers.html#//apple_ref/doc/uid/TP40010672-CH13-DontLinkElementID_8",
"aref": "//apple_ref/doc/uid/TP40010672-CH13-DontLinkElementID_8"
}
],
"type": "section"
},
{
"type": "section",
"href": "FileWrappers/FileWrappers.html#//apple_ref/doc/uid/TP40010672-CH13-SW1",
"title": "Accessing File Wrapper Identities",
"aref": "//apple_ref/doc/uid/TP40010672-CH13-SW1",
"sections": []
},
{
"sections": [],
"href": "FileWrappers/FileWrappers.html#//apple_ref/doc/uid/TP40010672-CH13-DontLinkElementID_9",
"title": "Transmitting File Wrappers",
"aref": "//apple_ref/doc/uid/TP40010672-CH13-DontLinkElementID_9",
"type": "section"
},
{
"type": "section",
"title": "Defining Your File Wrapper as a Document Package",
"aref": "//apple_ref/doc/uid/TP40010672-CH13-DontLinkElementID_10",
"href": "FileWrappers/FileWrappers.html#//apple_ref/doc/uid/TP40010672-CH13-DontLinkElementID_10",
"sections": []
}
],
"aref": "//apple_ref/doc/uid/TP40010672-CH13-SW2",
"title": "Using FileWrappers as File Containers",
"href": "FileWrappers/FileWrappers.html#//apple_ref/doc/uid/TP40010672-CH13-SW2",
"isPart": false,
"type": "chapter"
},
{
"sections": [
{
"href": "PerformanceTips/PerformanceTips.html#//apple_ref/doc/uid/TP40010672-CH7-SW2",
"title": "Potential Problem Areas and Fixes",
"aref": "//apple_ref/doc/uid/TP40010672-CH7-SW2",
"sections": [],
"type": "section"
},
{
"type": "section",
"sections": [
{
"type": "section",
"sections": [
{
"type": "section",
"aref": "//apple_ref/doc/uid/TP40010672-CH7-98104",
"title": "Disabling File System Caching",
"href": "PerformanceTips/PerformanceTips.html#//apple_ref/doc/uid/TP40010672-CH7-98104",
"sections": []
},
{
"type": "section",
"sections": [],
"href": "PerformanceTips/PerformanceTips.html#//apple_ref/doc/uid/TP40010672-CH7-115082",
"title": "Using Mapped I/O Instead of Caching",
"aref": "//apple_ref/doc/uid/TP40010672-CH7-115082"
}
],
"aref": "//apple_ref/doc/uid/TP40010672-CH7-99732-CJBDHHBG",
"title": "Deciding When to Use File System Caching or Mapped I/O",
"href": "PerformanceTips/PerformanceTips.html#//apple_ref/doc/uid/TP40010672-CH7-99732-CJBDHHBG"
},
{
"sections": [],
"title": "Working with Zero-Filling",
"aref": "//apple_ref/doc/uid/TP40010672-CH7-97420-TPXREF104",
"href": "PerformanceTips/PerformanceTips.html#//apple_ref/doc/uid/TP40010672-CH7-97420-TPXREF104",
"type": "section"
}
],
"aref": "//apple_ref/doc/uid/TP40010672-CH7-SW3",
"title": "General Recommendations",
"href": "PerformanceTips/PerformanceTips.html#//apple_ref/doc/uid/TP40010672-CH7-SW3"
},
{
"type": "section",
"sections": [],
"href": "PerformanceTips/PerformanceTips.html#//apple_ref/doc/uid/TP40010672-CH7-100517",
"title": "Use Modern File System Interfaces",
"aref": "//apple_ref/doc/uid/TP40010672-CH7-100517"
}
],
"title": "Performance Tips",
"href": "PerformanceTips/PerformanceTips.html#//apple_ref/doc/uid/TP40010672-CH7-SW1",
"aref": "//apple_ref/doc/uid/TP40010672-CH7-SW1",
"isPart": false,
"type": "chapter"
},
{
"type": "chapter",
"isPart": false,
"href": "MacOSXDirectories/MacOSXDirectories.html#//apple_ref/doc/uid/TP40010672-CH10-SW1",
"title": "Appendix A: macOS Library Directory Details",
"aref": "//apple_ref/doc/uid/TP40010672-CH10-SW1"
},
{
"isPart": false,
"type": "chapter",
"sections": [
{
"sections": [],
"title": "Supported File Systems",
"aref": "//apple_ref/doc/uid/TP40010672-CH8-97329",
"href": "FileSystemDetails/FileSystemDetails.html#//apple_ref/doc/uid/TP40010672-CH8-97329",
"type": "section"
},
{
"type": "section",
"aref": "//apple_ref/doc/uid/TP40010672-CH8-SW4",
"title": "The Finder",
"href": "FileSystemDetails/FileSystemDetails.html#//apple_ref/doc/uid/TP40010672-CH8-SW4",
"sections": [
{
"title": "Filename Sorting Rules",
"href": "FileSystemDetails/FileSystemDetails.html#//apple_ref/doc/uid/TP40010672-CH8-SW5",
"aref": "//apple_ref/doc/uid/TP40010672-CH8-SW5",
"sections": [],
"type": "section"
},
{
"title": "Presentation Rules for Files and Directories",
"aref": "//apple_ref/doc/uid/TP40010672-CH8-110630",
"href": "FileSystemDetails/FileSystemDetails.html#//apple_ref/doc/uid/TP40010672-CH8-110630",
"sections": [],
"type": "section"
}
]
},
{
"sections": [],
"title": "File Types and Creator Codes",
"aref": "//apple_ref/doc/uid/TP40010672-CH8-SW7",
"href": "FileSystemDetails/FileSystemDetails.html#//apple_ref/doc/uid/TP40010672-CH8-SW7",
"type": "section"
},
{
"type": "section",
"aref": "//apple_ref/doc/uid/TP40010672-CH8-SW9",
"title": "macOS File System Security",
"href": "FileSystemDetails/FileSystemDetails.html#//apple_ref/doc/uid/TP40010672-CH8-SW9",
"sections": [
{
"sections": [
{
"href": "FileSystemDetails/FileSystemDetails.html#//apple_ref/doc/uid/TP40010672-CH8-SW2",
"title": "Sandbox Entitlements",
"aref": "//apple_ref/doc/uid/TP40010672-CH8-SW2",
"sections": [],
"type": "section"
},
{
"href": "FileSystemDetails/FileSystemDetails.html#//apple_ref/doc/uid/TP40010672-CH8-SW3",
"title": "POSIX ACLs",
"aref": "//apple_ref/doc/uid/TP40010672-CH8-SW3",
"sections": [
{
"type": "section",
"href": "FileSystemDetails/FileSystemDetails.html#//apple_ref/doc/uid/TP40010672-CH8-SW16",
"title": "File System Access Control Policy",
"aref": "//apple_ref/doc/uid/TP40010672-CH8-SW16",
"sections": []
},
{
"type": "section",
"title": "ACLs and User IDs",
"href": "FileSystemDetails/FileSystemDetails.html#//apple_ref/doc/uid/TP40010672-CH8-SW18",
"aref": "//apple_ref/doc/uid/TP40010672-CH8-SW18",
"sections": []
},
{
"type": "section",
"aref": "//apple_ref/doc/uid/TP40010672-CH8-SW19",
"title": "Evaluating Access Control Lists",
"href": "FileSystemDetails/FileSystemDetails.html#//apple_ref/doc/uid/TP40010672-CH8-SW19",
"sections": []
},
{
"sections": [],
"title": "Inheritance of Permissions",
"aref": "//apple_ref/doc/uid/TP40010672-CH8-SW20",
"href": "FileSystemDetails/FileSystemDetails.html#//apple_ref/doc/uid/TP40010672-CH8-SW20",
"type": "section"
}
],
"type": "section"
},
{
"type": "section",
"title": "BSD File Flags",
"aref": "//apple_ref/doc/uid/TP40010672-CH8-SW8",
"href": "FileSystemDetails/FileSystemDetails.html#//apple_ref/doc/uid/TP40010672-CH8-SW8",
"sections": []
},
{
"type": "section",
"sections": [],
"href": "FileSystemDetails/FileSystemDetails.html#//apple_ref/doc/uid/TP40010672-CH8-SW6",
"title": "UNIX Permissions",
"aref": "//apple_ref/doc/uid/TP40010672-CH8-SW6"
}
],
"aref": "//apple_ref/doc/uid/TP40010672-CH8-SW10",
"title": "Security Schemes",
"href": "FileSystemDetails/FileSystemDetails.html#//apple_ref/doc/uid/TP40010672-CH8-SW10",
"type": "section"
},
{
"sections": [
{
"href": "FileSystemDetails/FileSystemDetails.html#//apple_ref/doc/uid/TP40010672-CH8-SW23",
"title": "The Root User",
"aref": "//apple_ref/doc/uid/TP40010672-CH8-SW23",
"sections": [],
"type": "section"
},
{
"sections": [],
"aref": "//apple_ref/doc/uid/TP40010672-CH8-SW25",
"title": "The Wheel Group",
"href": "FileSystemDetails/FileSystemDetails.html#//apple_ref/doc/uid/TP40010672-CH8-SW25",
"type": "section"
},
{
"type": "section",
"title": "The Admin Group",
"aref": "//apple_ref/doc/uid/TP40010672-CH8-SW26",
"href": "FileSystemDetails/FileSystemDetails.html#//apple_ref/doc/uid/TP40010672-CH8-SW26",
"sections": []
}
],
"href": "FileSystemDetails/FileSystemDetails.html#//apple_ref/doc/uid/TP40010672-CH8-SW22",
"title": "Special Users And Groups",
"aref": "//apple_ref/doc/uid/TP40010672-CH8-SW22",
"type": "section"
},
{
"type": "section",
"href": "FileSystemDetails/FileSystemDetails.html#//apple_ref/doc/uid/TP40010672-CH8-SW27",
"title": "Network File Systems",
"aref": "//apple_ref/doc/uid/TP40010672-CH8-SW27",
"sections": [
{
"href": "FileSystemDetails/FileSystemDetails.html#//apple_ref/doc/uid/TP40010672-CH8-SW28",
"title": "AFP",
"aref": "//apple_ref/doc/uid/TP40010672-CH8-SW28",
"sections": [],
"type": "section"
},
{
"type": "section",
"sections": [],
"title": "NFS",
"href": "FileSystemDetails/FileSystemDetails.html#//apple_ref/doc/uid/TP40010672-CH8-SW29",
"aref": "//apple_ref/doc/uid/TP40010672-CH8-SW29"
},
{
"sections": [],
"href": "FileSystemDetails/FileSystemDetails.html#//apple_ref/doc/uid/TP40010672-CH8-SW30",
"title": "SMB/CIFS",
"aref": "//apple_ref/doc/uid/TP40010672-CH8-SW30",
"type": "section"
},
{
"title": "WebDAV",
"href": "FileSystemDetails/FileSystemDetails.html#//apple_ref/doc/uid/TP40010672-CH8-SW31",
"aref": "//apple_ref/doc/uid/TP40010672-CH8-SW31",
"sections": [],
"type": "section"
}
]
}
]
},
{
"type": "section",
"sections": [],
"title": "iOS File System Security",
"aref": "//apple_ref/doc/uid/TP40010672-CH8-SW32",
"href": "FileSystemDetails/FileSystemDetails.html#//apple_ref/doc/uid/TP40010672-CH8-SW32"
}
],
"title": "Appendix B: File System Details",
"href": "FileSystemDetails/FileSystemDetails.html#//apple_ref/doc/uid/TP40010672-CH8-SW1",
"aref": "//apple_ref/doc/uid/TP40010672-CH8-SW1"
},
{
"title": "Revision History",
"aref": "//apple_ref/doc/uid/TP40010672-CH99-SW1",
"href": "RevisionHistory.html#//apple_ref/doc/uid/TP40010672-CH99-SW1",
"isPart": false,
"type": "chapter"
}
],
"uid": "TP40010672",
"shouldDisplayTOC": true
}
@jigar007
Copy link

@100ideas is it somehow possible to still download new and old version of Apple documentation?

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment