initial commit
This commit is contained in:
parent
61f82ba7a4
commit
3b2d6d3f3e
12 changed files with 6904 additions and 0 deletions
32
Base64Decoder-Info.plist
Normal file
32
Base64Decoder-Info.plist
Normal file
|
@ -0,0 +1,32 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
||||||
|
<plist version="1.0">
|
||||||
|
<dict>
|
||||||
|
<key>CFBundleDevelopmentRegion</key>
|
||||||
|
<string>English</string>
|
||||||
|
<key>CFBundleExecutable</key>
|
||||||
|
<string>${EXECUTABLE_NAME}</string>
|
||||||
|
<key>CFBundleIconFile</key>
|
||||||
|
<string></string>
|
||||||
|
<key>CFBundleIdentifier</key>
|
||||||
|
<string>com.yourcompany.${PRODUCT_NAME:rfc1034identifier}</string>
|
||||||
|
<key>CFBundleInfoDictionaryVersion</key>
|
||||||
|
<string>6.0</string>
|
||||||
|
<key>CFBundleName</key>
|
||||||
|
<string>${PRODUCT_NAME}</string>
|
||||||
|
<key>CFBundlePackageType</key>
|
||||||
|
<string>APPL</string>
|
||||||
|
<key>CFBundleShortVersionString</key>
|
||||||
|
<string>1.0</string>
|
||||||
|
<key>CFBundleSignature</key>
|
||||||
|
<string>????</string>
|
||||||
|
<key>CFBundleVersion</key>
|
||||||
|
<string>1</string>
|
||||||
|
<key>LSMinimumSystemVersion</key>
|
||||||
|
<string>${MACOSX_DEPLOYMENT_TARGET}</string>
|
||||||
|
<key>NSMainNibFile</key>
|
||||||
|
<string>MainMenu</string>
|
||||||
|
<key>NSPrincipalClass</key>
|
||||||
|
<string>NSApplication</string>
|
||||||
|
</dict>
|
||||||
|
</plist>
|
1392
Base64Decoder.xcodeproj/jeena.mode1v3
Normal file
1392
Base64Decoder.xcodeproj/jeena.mode1v3
Normal file
File diff suppressed because it is too large
Load diff
143
Base64Decoder.xcodeproj/jeena.pbxuser
Normal file
143
Base64Decoder.xcodeproj/jeena.pbxuser
Normal file
|
@ -0,0 +1,143 @@
|
||||||
|
// !$*UTF8*$!
|
||||||
|
{
|
||||||
|
1FE6F2D511D9EDF1006101E7 /* Base64Decoder */ = {
|
||||||
|
isa = PBXExecutable;
|
||||||
|
activeArgIndices = (
|
||||||
|
);
|
||||||
|
argumentStrings = (
|
||||||
|
);
|
||||||
|
autoAttachOnCrash = 1;
|
||||||
|
breakpointsEnabled = 0;
|
||||||
|
configStateDict = {
|
||||||
|
};
|
||||||
|
customDataFormattersEnabled = 1;
|
||||||
|
dataTipCustomDataFormattersEnabled = 1;
|
||||||
|
dataTipShowTypeColumn = 1;
|
||||||
|
dataTipSortType = 0;
|
||||||
|
debuggerPlugin = GDBDebugging;
|
||||||
|
disassemblyDisplayState = 0;
|
||||||
|
dylibVariantSuffix = "";
|
||||||
|
enableDebugStr = 1;
|
||||||
|
environmentEntries = (
|
||||||
|
);
|
||||||
|
executableSystemSymbolLevel = 0;
|
||||||
|
executableUserSymbolLevel = 0;
|
||||||
|
libgmallocEnabled = 0;
|
||||||
|
name = Base64Decoder;
|
||||||
|
savedGlobals = {
|
||||||
|
};
|
||||||
|
showTypeColumn = 0;
|
||||||
|
sourceDirectories = (
|
||||||
|
);
|
||||||
|
};
|
||||||
|
1FE6F2E711D9EDF7006101E7 /* Source Control */ = {
|
||||||
|
isa = PBXSourceControlManager;
|
||||||
|
fallbackIsa = XCSourceControlManager;
|
||||||
|
isSCMEnabled = 0;
|
||||||
|
scmConfiguration = {
|
||||||
|
repositoryNamesForRoots = {
|
||||||
|
"" = "";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
1FE6F2E811D9EDF7006101E7 /* Code sense */ = {
|
||||||
|
isa = PBXCodeSenseManager;
|
||||||
|
indexTemplatePath = "";
|
||||||
|
};
|
||||||
|
1FE6F30011D9F7ED006101E7 /* PBXTextBookmark */ = {
|
||||||
|
isa = PBXTextBookmark;
|
||||||
|
fRef = 256AC3D80F4B6AC300CF3369 /* Base64DecoderAppDelegate.h */;
|
||||||
|
name = "Base64DecoderAppDelegate.h: 21";
|
||||||
|
rLen = 11;
|
||||||
|
rLoc = 493;
|
||||||
|
rType = 0;
|
||||||
|
vrLen = 512;
|
||||||
|
vrLoc = 0;
|
||||||
|
};
|
||||||
|
1FE6F30111D9F7ED006101E7 /* PBXTextBookmark */ = {
|
||||||
|
isa = PBXTextBookmark;
|
||||||
|
fRef = 256AC3D90F4B6AC300CF3369 /* Base64DecoderAppDelegate.m */;
|
||||||
|
name = "Base64DecoderAppDelegate.m: 21";
|
||||||
|
rLen = 0;
|
||||||
|
rLoc = 451;
|
||||||
|
rType = 0;
|
||||||
|
vrLen = 543;
|
||||||
|
vrLoc = 0;
|
||||||
|
};
|
||||||
|
1FE6F30211D9F7ED006101E7 /* PBXTextBookmark */ = {
|
||||||
|
isa = PBXTextBookmark;
|
||||||
|
fRef = 256AC3D90F4B6AC300CF3369 /* Base64DecoderAppDelegate.m */;
|
||||||
|
name = "Base64DecoderAppDelegate.m: 22";
|
||||||
|
rLen = 0;
|
||||||
|
rLoc = 570;
|
||||||
|
rType = 0;
|
||||||
|
vrLen = 676;
|
||||||
|
vrLoc = 0;
|
||||||
|
};
|
||||||
|
256AC3D80F4B6AC300CF3369 /* Base64DecoderAppDelegate.h */ = {
|
||||||
|
uiCtxt = {
|
||||||
|
sepNavIntBoundsRect = "{{0, 0}, {519, 403}}";
|
||||||
|
sepNavSelRange = "{493, 11}";
|
||||||
|
sepNavVisRange = "{0, 512}";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
256AC3D90F4B6AC300CF3369 /* Base64DecoderAppDelegate.m */ = {
|
||||||
|
uiCtxt = {
|
||||||
|
sepNavIntBoundsRect = "{{0, 0}, {649, 474}}";
|
||||||
|
sepNavSelRange = "{570, 0}";
|
||||||
|
sepNavVisRange = "{0, 676}";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
29B97313FDCFA39411CA2CEA /* Project object */ = {
|
||||||
|
activeBuildConfigurationName = Release;
|
||||||
|
activeExecutable = 1FE6F2D511D9EDF1006101E7 /* Base64Decoder */;
|
||||||
|
activeTarget = 8D1107260486CEB800E47090 /* Base64Decoder */;
|
||||||
|
addToTargets = (
|
||||||
|
8D1107260486CEB800E47090 /* Base64Decoder */,
|
||||||
|
);
|
||||||
|
codeSenseManager = 1FE6F2E811D9EDF7006101E7 /* Code sense */;
|
||||||
|
executables = (
|
||||||
|
1FE6F2D511D9EDF1006101E7 /* Base64Decoder */,
|
||||||
|
);
|
||||||
|
perUserDictionary = {
|
||||||
|
PBXConfiguration.PBXFileTableDataSource3.PBXFileTableDataSource = {
|
||||||
|
PBXFileTableDataSourceColumnSortingDirectionKey = "-1";
|
||||||
|
PBXFileTableDataSourceColumnSortingKey = PBXFileDataSource_Filename_ColumnID;
|
||||||
|
PBXFileTableDataSourceColumnWidthsKey = (
|
||||||
|
20,
|
||||||
|
341,
|
||||||
|
20,
|
||||||
|
48.16259765625,
|
||||||
|
43,
|
||||||
|
43,
|
||||||
|
20,
|
||||||
|
);
|
||||||
|
PBXFileTableDataSourceColumnsKey = (
|
||||||
|
PBXFileDataSource_FiletypeID,
|
||||||
|
PBXFileDataSource_Filename_ColumnID,
|
||||||
|
PBXFileDataSource_Built_ColumnID,
|
||||||
|
PBXFileDataSource_ObjectSize_ColumnID,
|
||||||
|
PBXFileDataSource_Errors_ColumnID,
|
||||||
|
PBXFileDataSource_Warnings_ColumnID,
|
||||||
|
PBXFileDataSource_Target_ColumnID,
|
||||||
|
);
|
||||||
|
};
|
||||||
|
PBXPerProjectTemplateStateSaveDate = 299494897;
|
||||||
|
PBXWorkspaceStateSaveDate = 299494897;
|
||||||
|
};
|
||||||
|
perUserProjectItems = {
|
||||||
|
1FE6F30011D9F7ED006101E7 /* PBXTextBookmark */ = 1FE6F30011D9F7ED006101E7 /* PBXTextBookmark */;
|
||||||
|
1FE6F30111D9F7ED006101E7 /* PBXTextBookmark */ = 1FE6F30111D9F7ED006101E7 /* PBXTextBookmark */;
|
||||||
|
1FE6F30211D9F7ED006101E7 /* PBXTextBookmark */ = 1FE6F30211D9F7ED006101E7 /* PBXTextBookmark */;
|
||||||
|
};
|
||||||
|
sourceControlManager = 1FE6F2E711D9EDF7006101E7 /* Source Control */;
|
||||||
|
userBuildSettings = {
|
||||||
|
};
|
||||||
|
};
|
||||||
|
8D1107260486CEB800E47090 /* Base64Decoder */ = {
|
||||||
|
activeExec = 0;
|
||||||
|
executables = (
|
||||||
|
1FE6F2D511D9EDF1006101E7 /* Base64Decoder */,
|
||||||
|
);
|
||||||
|
};
|
||||||
|
}
|
288
Base64Decoder.xcodeproj/project.pbxproj
Normal file
288
Base64Decoder.xcodeproj/project.pbxproj
Normal file
|
@ -0,0 +1,288 @@
|
||||||
|
// !$*UTF8*$!
|
||||||
|
{
|
||||||
|
archiveVersion = 1;
|
||||||
|
classes = {
|
||||||
|
};
|
||||||
|
objectVersion = 45;
|
||||||
|
objects = {
|
||||||
|
|
||||||
|
/* Begin PBXBuildFile section */
|
||||||
|
1DDD58160DA1D0A300B32029 /* MainMenu.xib in Resources */ = {isa = PBXBuildFile; fileRef = 1DDD58140DA1D0A300B32029 /* MainMenu.xib */; };
|
||||||
|
1FE6F2ED11D9F057006101E7 /* NSData+Base64.m in Sources */ = {isa = PBXBuildFile; fileRef = 1FE6F2EC11D9F057006101E7 /* NSData+Base64.m */; };
|
||||||
|
256AC3DA0F4B6AC300CF3369 /* Base64DecoderAppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = 256AC3D90F4B6AC300CF3369 /* Base64DecoderAppDelegate.m */; };
|
||||||
|
8D11072B0486CEB800E47090 /* InfoPlist.strings in Resources */ = {isa = PBXBuildFile; fileRef = 089C165CFE840E0CC02AAC07 /* InfoPlist.strings */; };
|
||||||
|
8D11072D0486CEB800E47090 /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = 29B97316FDCFA39411CA2CEA /* main.m */; settings = {ATTRIBUTES = (); }; };
|
||||||
|
8D11072F0486CEB800E47090 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; };
|
||||||
|
/* End PBXBuildFile section */
|
||||||
|
|
||||||
|
/* Begin PBXFileReference section */
|
||||||
|
089C165DFE840E0CC02AAC07 /* English */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.strings; name = English; path = English.lproj/InfoPlist.strings; sourceTree = "<group>"; };
|
||||||
|
1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Cocoa.framework; path = /System/Library/Frameworks/Cocoa.framework; sourceTree = "<absolute>"; };
|
||||||
|
13E42FB307B3F0F600E4EEF1 /* CoreData.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreData.framework; path = /System/Library/Frameworks/CoreData.framework; sourceTree = "<absolute>"; };
|
||||||
|
1DDD58150DA1D0A300B32029 /* English */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = English; path = English.lproj/MainMenu.xib; sourceTree = "<group>"; };
|
||||||
|
1FE6F2EB11D9F057006101E7 /* NSData+Base64.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "NSData+Base64.h"; sourceTree = "<group>"; };
|
||||||
|
1FE6F2EC11D9F057006101E7 /* NSData+Base64.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "NSData+Base64.m"; sourceTree = "<group>"; };
|
||||||
|
256AC3D80F4B6AC300CF3369 /* Base64DecoderAppDelegate.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Base64DecoderAppDelegate.h; sourceTree = "<group>"; };
|
||||||
|
256AC3D90F4B6AC300CF3369 /* Base64DecoderAppDelegate.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = Base64DecoderAppDelegate.m; sourceTree = "<group>"; };
|
||||||
|
256AC3F00F4B6AF500CF3369 /* Base64Decoder_Prefix.pch */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Base64Decoder_Prefix.pch; sourceTree = "<group>"; };
|
||||||
|
29B97316FDCFA39411CA2CEA /* main.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = main.m; sourceTree = "<group>"; };
|
||||||
|
29B97324FDCFA39411CA2CEA /* AppKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AppKit.framework; path = /System/Library/Frameworks/AppKit.framework; sourceTree = "<absolute>"; };
|
||||||
|
29B97325FDCFA39411CA2CEA /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = /System/Library/Frameworks/Foundation.framework; sourceTree = "<absolute>"; };
|
||||||
|
8D1107310486CEB800E47090 /* Base64Decoder-Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = "Base64Decoder-Info.plist"; sourceTree = "<group>"; };
|
||||||
|
8D1107320486CEB800E47090 /* Base64Decoder.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Base64Decoder.app; sourceTree = BUILT_PRODUCTS_DIR; };
|
||||||
|
/* End PBXFileReference section */
|
||||||
|
|
||||||
|
/* Begin PBXFrameworksBuildPhase section */
|
||||||
|
8D11072E0486CEB800E47090 /* Frameworks */ = {
|
||||||
|
isa = PBXFrameworksBuildPhase;
|
||||||
|
buildActionMask = 2147483647;
|
||||||
|
files = (
|
||||||
|
8D11072F0486CEB800E47090 /* Cocoa.framework in Frameworks */,
|
||||||
|
);
|
||||||
|
runOnlyForDeploymentPostprocessing = 0;
|
||||||
|
};
|
||||||
|
/* End PBXFrameworksBuildPhase section */
|
||||||
|
|
||||||
|
/* Begin PBXGroup section */
|
||||||
|
080E96DDFE201D6D7F000001 /* Classes */ = {
|
||||||
|
isa = PBXGroup;
|
||||||
|
children = (
|
||||||
|
1FE6F2EB11D9F057006101E7 /* NSData+Base64.h */,
|
||||||
|
1FE6F2EC11D9F057006101E7 /* NSData+Base64.m */,
|
||||||
|
256AC3D80F4B6AC300CF3369 /* Base64DecoderAppDelegate.h */,
|
||||||
|
256AC3D90F4B6AC300CF3369 /* Base64DecoderAppDelegate.m */,
|
||||||
|
);
|
||||||
|
name = Classes;
|
||||||
|
sourceTree = "<group>";
|
||||||
|
};
|
||||||
|
1058C7A0FEA54F0111CA2CBB /* Linked Frameworks */ = {
|
||||||
|
isa = PBXGroup;
|
||||||
|
children = (
|
||||||
|
1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */,
|
||||||
|
);
|
||||||
|
name = "Linked Frameworks";
|
||||||
|
sourceTree = "<group>";
|
||||||
|
};
|
||||||
|
1058C7A2FEA54F0111CA2CBB /* Other Frameworks */ = {
|
||||||
|
isa = PBXGroup;
|
||||||
|
children = (
|
||||||
|
29B97324FDCFA39411CA2CEA /* AppKit.framework */,
|
||||||
|
13E42FB307B3F0F600E4EEF1 /* CoreData.framework */,
|
||||||
|
29B97325FDCFA39411CA2CEA /* Foundation.framework */,
|
||||||
|
);
|
||||||
|
name = "Other Frameworks";
|
||||||
|
sourceTree = "<group>";
|
||||||
|
};
|
||||||
|
19C28FACFE9D520D11CA2CBB /* Products */ = {
|
||||||
|
isa = PBXGroup;
|
||||||
|
children = (
|
||||||
|
8D1107320486CEB800E47090 /* Base64Decoder.app */,
|
||||||
|
);
|
||||||
|
name = Products;
|
||||||
|
sourceTree = "<group>";
|
||||||
|
};
|
||||||
|
29B97314FDCFA39411CA2CEA /* Base64Decoder */ = {
|
||||||
|
isa = PBXGroup;
|
||||||
|
children = (
|
||||||
|
080E96DDFE201D6D7F000001 /* Classes */,
|
||||||
|
29B97315FDCFA39411CA2CEA /* Other Sources */,
|
||||||
|
29B97317FDCFA39411CA2CEA /* Resources */,
|
||||||
|
29B97323FDCFA39411CA2CEA /* Frameworks */,
|
||||||
|
19C28FACFE9D520D11CA2CBB /* Products */,
|
||||||
|
);
|
||||||
|
name = Base64Decoder;
|
||||||
|
sourceTree = "<group>";
|
||||||
|
};
|
||||||
|
29B97315FDCFA39411CA2CEA /* Other Sources */ = {
|
||||||
|
isa = PBXGroup;
|
||||||
|
children = (
|
||||||
|
256AC3F00F4B6AF500CF3369 /* Base64Decoder_Prefix.pch */,
|
||||||
|
29B97316FDCFA39411CA2CEA /* main.m */,
|
||||||
|
);
|
||||||
|
name = "Other Sources";
|
||||||
|
sourceTree = "<group>";
|
||||||
|
};
|
||||||
|
29B97317FDCFA39411CA2CEA /* Resources */ = {
|
||||||
|
isa = PBXGroup;
|
||||||
|
children = (
|
||||||
|
8D1107310486CEB800E47090 /* Base64Decoder-Info.plist */,
|
||||||
|
089C165CFE840E0CC02AAC07 /* InfoPlist.strings */,
|
||||||
|
1DDD58140DA1D0A300B32029 /* MainMenu.xib */,
|
||||||
|
);
|
||||||
|
name = Resources;
|
||||||
|
sourceTree = "<group>";
|
||||||
|
};
|
||||||
|
29B97323FDCFA39411CA2CEA /* Frameworks */ = {
|
||||||
|
isa = PBXGroup;
|
||||||
|
children = (
|
||||||
|
1058C7A0FEA54F0111CA2CBB /* Linked Frameworks */,
|
||||||
|
1058C7A2FEA54F0111CA2CBB /* Other Frameworks */,
|
||||||
|
);
|
||||||
|
name = Frameworks;
|
||||||
|
sourceTree = "<group>";
|
||||||
|
};
|
||||||
|
/* End PBXGroup section */
|
||||||
|
|
||||||
|
/* Begin PBXNativeTarget section */
|
||||||
|
8D1107260486CEB800E47090 /* Base64Decoder */ = {
|
||||||
|
isa = PBXNativeTarget;
|
||||||
|
buildConfigurationList = C01FCF4A08A954540054247B /* Build configuration list for PBXNativeTarget "Base64Decoder" */;
|
||||||
|
buildPhases = (
|
||||||
|
8D1107290486CEB800E47090 /* Resources */,
|
||||||
|
8D11072C0486CEB800E47090 /* Sources */,
|
||||||
|
8D11072E0486CEB800E47090 /* Frameworks */,
|
||||||
|
);
|
||||||
|
buildRules = (
|
||||||
|
);
|
||||||
|
dependencies = (
|
||||||
|
);
|
||||||
|
name = Base64Decoder;
|
||||||
|
productInstallPath = "$(HOME)/Applications";
|
||||||
|
productName = Base64Decoder;
|
||||||
|
productReference = 8D1107320486CEB800E47090 /* Base64Decoder.app */;
|
||||||
|
productType = "com.apple.product-type.application";
|
||||||
|
};
|
||||||
|
/* End PBXNativeTarget section */
|
||||||
|
|
||||||
|
/* Begin PBXProject section */
|
||||||
|
29B97313FDCFA39411CA2CEA /* Project object */ = {
|
||||||
|
isa = PBXProject;
|
||||||
|
buildConfigurationList = C01FCF4E08A954540054247B /* Build configuration list for PBXProject "Base64Decoder" */;
|
||||||
|
compatibilityVersion = "Xcode 3.1";
|
||||||
|
hasScannedForEncodings = 1;
|
||||||
|
mainGroup = 29B97314FDCFA39411CA2CEA /* Base64Decoder */;
|
||||||
|
projectDirPath = "";
|
||||||
|
projectRoot = "";
|
||||||
|
targets = (
|
||||||
|
8D1107260486CEB800E47090 /* Base64Decoder */,
|
||||||
|
);
|
||||||
|
};
|
||||||
|
/* End PBXProject section */
|
||||||
|
|
||||||
|
/* Begin PBXResourcesBuildPhase section */
|
||||||
|
8D1107290486CEB800E47090 /* Resources */ = {
|
||||||
|
isa = PBXResourcesBuildPhase;
|
||||||
|
buildActionMask = 2147483647;
|
||||||
|
files = (
|
||||||
|
8D11072B0486CEB800E47090 /* InfoPlist.strings in Resources */,
|
||||||
|
1DDD58160DA1D0A300B32029 /* MainMenu.xib in Resources */,
|
||||||
|
);
|
||||||
|
runOnlyForDeploymentPostprocessing = 0;
|
||||||
|
};
|
||||||
|
/* End PBXResourcesBuildPhase section */
|
||||||
|
|
||||||
|
/* Begin PBXSourcesBuildPhase section */
|
||||||
|
8D11072C0486CEB800E47090 /* Sources */ = {
|
||||||
|
isa = PBXSourcesBuildPhase;
|
||||||
|
buildActionMask = 2147483647;
|
||||||
|
files = (
|
||||||
|
8D11072D0486CEB800E47090 /* main.m in Sources */,
|
||||||
|
256AC3DA0F4B6AC300CF3369 /* Base64DecoderAppDelegate.m in Sources */,
|
||||||
|
1FE6F2ED11D9F057006101E7 /* NSData+Base64.m in Sources */,
|
||||||
|
);
|
||||||
|
runOnlyForDeploymentPostprocessing = 0;
|
||||||
|
};
|
||||||
|
/* End PBXSourcesBuildPhase section */
|
||||||
|
|
||||||
|
/* Begin PBXVariantGroup section */
|
||||||
|
089C165CFE840E0CC02AAC07 /* InfoPlist.strings */ = {
|
||||||
|
isa = PBXVariantGroup;
|
||||||
|
children = (
|
||||||
|
089C165DFE840E0CC02AAC07 /* English */,
|
||||||
|
);
|
||||||
|
name = InfoPlist.strings;
|
||||||
|
sourceTree = "<group>";
|
||||||
|
};
|
||||||
|
1DDD58140DA1D0A300B32029 /* MainMenu.xib */ = {
|
||||||
|
isa = PBXVariantGroup;
|
||||||
|
children = (
|
||||||
|
1DDD58150DA1D0A300B32029 /* English */,
|
||||||
|
);
|
||||||
|
name = MainMenu.xib;
|
||||||
|
sourceTree = "<group>";
|
||||||
|
};
|
||||||
|
/* End PBXVariantGroup section */
|
||||||
|
|
||||||
|
/* Begin XCBuildConfiguration section */
|
||||||
|
C01FCF4B08A954540054247B /* Debug */ = {
|
||||||
|
isa = XCBuildConfiguration;
|
||||||
|
buildSettings = {
|
||||||
|
ALWAYS_SEARCH_USER_PATHS = NO;
|
||||||
|
COPY_PHASE_STRIP = NO;
|
||||||
|
GCC_DYNAMIC_NO_PIC = NO;
|
||||||
|
GCC_ENABLE_FIX_AND_CONTINUE = YES;
|
||||||
|
GCC_MODEL_TUNING = G5;
|
||||||
|
GCC_OPTIMIZATION_LEVEL = 0;
|
||||||
|
GCC_PRECOMPILE_PREFIX_HEADER = YES;
|
||||||
|
GCC_PREFIX_HEADER = Base64Decoder_Prefix.pch;
|
||||||
|
INFOPLIST_FILE = "Base64Decoder-Info.plist";
|
||||||
|
INSTALL_PATH = "$(HOME)/Applications";
|
||||||
|
PRODUCT_NAME = Base64Decoder;
|
||||||
|
};
|
||||||
|
name = Debug;
|
||||||
|
};
|
||||||
|
C01FCF4C08A954540054247B /* Release */ = {
|
||||||
|
isa = XCBuildConfiguration;
|
||||||
|
buildSettings = {
|
||||||
|
ALWAYS_SEARCH_USER_PATHS = NO;
|
||||||
|
DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
|
||||||
|
GCC_MODEL_TUNING = G5;
|
||||||
|
GCC_PRECOMPILE_PREFIX_HEADER = YES;
|
||||||
|
GCC_PREFIX_HEADER = Base64Decoder_Prefix.pch;
|
||||||
|
INFOPLIST_FILE = "Base64Decoder-Info.plist";
|
||||||
|
INSTALL_PATH = "$(HOME)/Applications";
|
||||||
|
PRODUCT_NAME = Base64Decoder;
|
||||||
|
};
|
||||||
|
name = Release;
|
||||||
|
};
|
||||||
|
C01FCF4F08A954540054247B /* Debug */ = {
|
||||||
|
isa = XCBuildConfiguration;
|
||||||
|
buildSettings = {
|
||||||
|
ARCHS = "$(ARCHS_STANDARD_32_64_BIT)";
|
||||||
|
GCC_C_LANGUAGE_STANDARD = gnu99;
|
||||||
|
GCC_OPTIMIZATION_LEVEL = 0;
|
||||||
|
GCC_WARN_ABOUT_RETURN_TYPE = YES;
|
||||||
|
GCC_WARN_UNUSED_VARIABLE = YES;
|
||||||
|
ONLY_ACTIVE_ARCH = YES;
|
||||||
|
PREBINDING = NO;
|
||||||
|
SDKROOT = macosx10.6;
|
||||||
|
};
|
||||||
|
name = Debug;
|
||||||
|
};
|
||||||
|
C01FCF5008A954540054247B /* Release */ = {
|
||||||
|
isa = XCBuildConfiguration;
|
||||||
|
buildSettings = {
|
||||||
|
ARCHS = "$(ARCHS_STANDARD_32_64_BIT)";
|
||||||
|
GCC_C_LANGUAGE_STANDARD = gnu99;
|
||||||
|
GCC_WARN_ABOUT_RETURN_TYPE = YES;
|
||||||
|
GCC_WARN_UNUSED_VARIABLE = YES;
|
||||||
|
PREBINDING = NO;
|
||||||
|
SDKROOT = macosx10.6;
|
||||||
|
};
|
||||||
|
name = Release;
|
||||||
|
};
|
||||||
|
/* End XCBuildConfiguration section */
|
||||||
|
|
||||||
|
/* Begin XCConfigurationList section */
|
||||||
|
C01FCF4A08A954540054247B /* Build configuration list for PBXNativeTarget "Base64Decoder" */ = {
|
||||||
|
isa = XCConfigurationList;
|
||||||
|
buildConfigurations = (
|
||||||
|
C01FCF4B08A954540054247B /* Debug */,
|
||||||
|
C01FCF4C08A954540054247B /* Release */,
|
||||||
|
);
|
||||||
|
defaultConfigurationIsVisible = 0;
|
||||||
|
defaultConfigurationName = Release;
|
||||||
|
};
|
||||||
|
C01FCF4E08A954540054247B /* Build configuration list for PBXProject "Base64Decoder" */ = {
|
||||||
|
isa = XCConfigurationList;
|
||||||
|
buildConfigurations = (
|
||||||
|
C01FCF4F08A954540054247B /* Debug */,
|
||||||
|
C01FCF5008A954540054247B /* Release */,
|
||||||
|
);
|
||||||
|
defaultConfigurationIsVisible = 0;
|
||||||
|
defaultConfigurationName = Release;
|
||||||
|
};
|
||||||
|
/* End XCConfigurationList section */
|
||||||
|
};
|
||||||
|
rootObject = 29B97313FDCFA39411CA2CEA /* Project object */;
|
||||||
|
}
|
23
Base64DecoderAppDelegate.h
Normal file
23
Base64DecoderAppDelegate.h
Normal file
|
@ -0,0 +1,23 @@
|
||||||
|
//
|
||||||
|
// Base64DecoderAppDelegate.h
|
||||||
|
// Base64Decoder
|
||||||
|
//
|
||||||
|
// Created by Jeena on 29.06.10.
|
||||||
|
// Copyright 2010 Jeena Paradies. All rights reserved.
|
||||||
|
//
|
||||||
|
|
||||||
|
#import <Cocoa/Cocoa.h>
|
||||||
|
|
||||||
|
@interface Base64DecoderAppDelegate : NSObject <NSApplicationDelegate> {
|
||||||
|
NSWindow *window;
|
||||||
|
IBOutlet NSTextField *input;
|
||||||
|
IBOutlet NSTextView *output;
|
||||||
|
}
|
||||||
|
|
||||||
|
@property (assign) IBOutlet NSWindow *window;
|
||||||
|
@property (assign) IBOutlet NSTextField *input;
|
||||||
|
@property (assign) IBOutlet NSTextView *output;
|
||||||
|
|
||||||
|
- (IBAction)decode:(id)sender;
|
||||||
|
|
||||||
|
@end
|
26
Base64DecoderAppDelegate.m
Normal file
26
Base64DecoderAppDelegate.m
Normal file
|
@ -0,0 +1,26 @@
|
||||||
|
//
|
||||||
|
// Base64DecoderAppDelegate.m
|
||||||
|
// Base64Decoder
|
||||||
|
//
|
||||||
|
// Created by Jeena on 29.06.10.
|
||||||
|
// Copyright 2010 Jeena Paradies. All rights reserved.
|
||||||
|
//
|
||||||
|
|
||||||
|
#import "Base64DecoderAppDelegate.h"
|
||||||
|
#import "NSData+Base64.h"
|
||||||
|
|
||||||
|
@implementation Base64DecoderAppDelegate
|
||||||
|
|
||||||
|
@synthesize window, input, output;
|
||||||
|
|
||||||
|
- (void)applicationDidFinishLaunching:(NSNotification *)aNotification {
|
||||||
|
// Insert code here to initialize your application
|
||||||
|
}
|
||||||
|
|
||||||
|
- (IBAction)decode:(id)sender {
|
||||||
|
NSData* data = [NSData dataFromBase64String:[input stringValue]];
|
||||||
|
NSString *string = [[NSString alloc] initWithData:data encoding:NSASCIIStringEncoding];
|
||||||
|
[[[output textStorage] mutableString] appendString:string];
|
||||||
|
}
|
||||||
|
|
||||||
|
@end
|
7
Base64Decoder_Prefix.pch
Normal file
7
Base64Decoder_Prefix.pch
Normal file
|
@ -0,0 +1,7 @@
|
||||||
|
//
|
||||||
|
// Prefix header for all source files of the 'Base64Decoder' target in the 'Base64Decoder' project
|
||||||
|
//
|
||||||
|
|
||||||
|
#ifdef __OBJC__
|
||||||
|
#import <Cocoa/Cocoa.h>
|
||||||
|
#endif
|
2
English.lproj/InfoPlist.strings
Normal file
2
English.lproj/InfoPlist.strings
Normal file
|
@ -0,0 +1,2 @@
|
||||||
|
/* Localized versions of Info.plist keys */
|
||||||
|
|
4645
English.lproj/MainMenu.xib
Normal file
4645
English.lproj/MainMenu.xib
Normal file
File diff suppressed because it is too large
Load diff
33
NSData+Base64.h
Normal file
33
NSData+Base64.h
Normal file
|
@ -0,0 +1,33 @@
|
||||||
|
//
|
||||||
|
// NSData+Base64.h
|
||||||
|
// base64
|
||||||
|
//
|
||||||
|
// Created by Matt Gallagher on 2009/06/03.
|
||||||
|
// Copyright 2009 Matt Gallagher. All rights reserved.
|
||||||
|
//
|
||||||
|
// Permission is given to use this source code file, free of charge, in any
|
||||||
|
// project, commercial or otherwise, entirely at your risk, with the condition
|
||||||
|
// that any redistribution (in part or whole) of source code must retain
|
||||||
|
// this copyright and permission notice. Attribution in compiled projects is
|
||||||
|
// appreciated but not required.
|
||||||
|
//
|
||||||
|
|
||||||
|
#import <Foundation/Foundation.h>
|
||||||
|
|
||||||
|
void *NewBase64Decode(
|
||||||
|
const char *inputBuffer,
|
||||||
|
size_t length,
|
||||||
|
size_t *outputLength);
|
||||||
|
|
||||||
|
char *NewBase64Encode(
|
||||||
|
const void *inputBuffer,
|
||||||
|
size_t length,
|
||||||
|
bool separateLines,
|
||||||
|
size_t *outputLength);
|
||||||
|
|
||||||
|
@interface NSData (Base64)
|
||||||
|
|
||||||
|
+ (NSData *)dataFromBase64String:(NSString *)aString;
|
||||||
|
- (NSString *)base64EncodedString;
|
||||||
|
|
||||||
|
@end
|
299
NSData+Base64.m
Normal file
299
NSData+Base64.m
Normal file
|
@ -0,0 +1,299 @@
|
||||||
|
//
|
||||||
|
// NSData+Base64.m
|
||||||
|
// base64
|
||||||
|
//
|
||||||
|
// Created by Matt Gallagher on 2009/06/03.
|
||||||
|
// Copyright 2009 Matt Gallagher. All rights reserved.
|
||||||
|
//
|
||||||
|
// Permission is given to use this source code file, free of charge, in any
|
||||||
|
// project, commercial or otherwise, entirely at your risk, with the condition
|
||||||
|
// that any redistribution (in part or whole) of source code must retain
|
||||||
|
// this copyright and permission notice. Attribution in compiled projects is
|
||||||
|
// appreciated but not required.
|
||||||
|
//
|
||||||
|
|
||||||
|
#import "NSData+Base64.h"
|
||||||
|
|
||||||
|
//
|
||||||
|
// Mapping from 6 bit pattern to ASCII character.
|
||||||
|
//
|
||||||
|
static unsigned char base64EncodeLookup[65] =
|
||||||
|
"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
|
||||||
|
|
||||||
|
//
|
||||||
|
// Definition for "masked-out" areas of the base64DecodeLookup mapping
|
||||||
|
//
|
||||||
|
#define xx 65
|
||||||
|
|
||||||
|
//
|
||||||
|
// Mapping from ASCII character to 6 bit pattern.
|
||||||
|
//
|
||||||
|
static unsigned char base64DecodeLookup[256] =
|
||||||
|
{
|
||||||
|
xx, xx, xx, xx, xx, xx, xx, xx, xx, xx, xx, xx, xx, xx, xx, xx,
|
||||||
|
xx, xx, xx, xx, xx, xx, xx, xx, xx, xx, xx, xx, xx, xx, xx, xx,
|
||||||
|
xx, xx, xx, xx, xx, xx, xx, xx, xx, xx, xx, 62, xx, xx, xx, 63,
|
||||||
|
52, 53, 54, 55, 56, 57, 58, 59, 60, 61, xx, xx, xx, xx, xx, xx,
|
||||||
|
xx, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14,
|
||||||
|
15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, xx, xx, xx, xx, xx,
|
||||||
|
xx, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40,
|
||||||
|
41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, xx, xx, xx, xx, xx,
|
||||||
|
xx, xx, xx, xx, xx, xx, xx, xx, xx, xx, xx, xx, xx, xx, xx, xx,
|
||||||
|
xx, xx, xx, xx, xx, xx, xx, xx, xx, xx, xx, xx, xx, xx, xx, xx,
|
||||||
|
xx, xx, xx, xx, xx, xx, xx, xx, xx, xx, xx, xx, xx, xx, xx, xx,
|
||||||
|
xx, xx, xx, xx, xx, xx, xx, xx, xx, xx, xx, xx, xx, xx, xx, xx,
|
||||||
|
xx, xx, xx, xx, xx, xx, xx, xx, xx, xx, xx, xx, xx, xx, xx, xx,
|
||||||
|
xx, xx, xx, xx, xx, xx, xx, xx, xx, xx, xx, xx, xx, xx, xx, xx,
|
||||||
|
xx, xx, xx, xx, xx, xx, xx, xx, xx, xx, xx, xx, xx, xx, xx, xx,
|
||||||
|
xx, xx, xx, xx, xx, xx, xx, xx, xx, xx, xx, xx, xx, xx, xx, xx,
|
||||||
|
};
|
||||||
|
|
||||||
|
//
|
||||||
|
// Fundamental sizes of the binary and base64 encode/decode units in bytes
|
||||||
|
//
|
||||||
|
#define BINARY_UNIT_SIZE 3
|
||||||
|
#define BASE64_UNIT_SIZE 4
|
||||||
|
|
||||||
|
//
|
||||||
|
// NewBase64Decode
|
||||||
|
//
|
||||||
|
// Decodes the base64 ASCII string in the inputBuffer to a newly malloced
|
||||||
|
// output buffer.
|
||||||
|
//
|
||||||
|
// inputBuffer - the source ASCII string for the decode
|
||||||
|
// length - the length of the string or -1 (to specify strlen should be used)
|
||||||
|
// outputLength - if not-NULL, on output will contain the decoded length
|
||||||
|
//
|
||||||
|
// returns the decoded buffer. Must be free'd by caller. Length is given by
|
||||||
|
// outputLength.
|
||||||
|
//
|
||||||
|
void *NewBase64Decode(
|
||||||
|
const char *inputBuffer,
|
||||||
|
size_t length,
|
||||||
|
size_t *outputLength)
|
||||||
|
{
|
||||||
|
if (length == -1)
|
||||||
|
{
|
||||||
|
length = strlen(inputBuffer);
|
||||||
|
}
|
||||||
|
|
||||||
|
size_t outputBufferSize =
|
||||||
|
((length+BASE64_UNIT_SIZE-1) / BASE64_UNIT_SIZE) * BINARY_UNIT_SIZE;
|
||||||
|
unsigned char *outputBuffer = (unsigned char *)malloc(outputBufferSize);
|
||||||
|
|
||||||
|
size_t i = 0;
|
||||||
|
size_t j = 0;
|
||||||
|
while (i < length)
|
||||||
|
{
|
||||||
|
//
|
||||||
|
// Accumulate 4 valid characters (ignore everything else)
|
||||||
|
//
|
||||||
|
unsigned char accumulated[BASE64_UNIT_SIZE];
|
||||||
|
size_t accumulateIndex = 0;
|
||||||
|
while (i < length)
|
||||||
|
{
|
||||||
|
unsigned char decode = base64DecodeLookup[inputBuffer[i++]];
|
||||||
|
if (decode != xx)
|
||||||
|
{
|
||||||
|
accumulated[accumulateIndex] = decode;
|
||||||
|
accumulateIndex++;
|
||||||
|
|
||||||
|
if (accumulateIndex == BASE64_UNIT_SIZE)
|
||||||
|
{
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
// Store the 6 bits from each of the 4 characters as 3 bytes
|
||||||
|
//
|
||||||
|
outputBuffer[j] = (accumulated[0] << 2) | (accumulated[1] >> 4);
|
||||||
|
outputBuffer[j + 1] = (accumulated[1] << 4) | (accumulated[2] >> 2);
|
||||||
|
outputBuffer[j + 2] = (accumulated[2] << 6) | accumulated[3];
|
||||||
|
j += accumulateIndex - 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (outputLength)
|
||||||
|
{
|
||||||
|
*outputLength = j;
|
||||||
|
}
|
||||||
|
return outputBuffer;
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
// NewBase64Decode
|
||||||
|
//
|
||||||
|
// Encodes the arbitrary data in the inputBuffer as base64 into a newly malloced
|
||||||
|
// output buffer.
|
||||||
|
//
|
||||||
|
// inputBuffer - the source data for the encode
|
||||||
|
// length - the length of the input in bytes
|
||||||
|
// separateLines - if zero, no CR/LF characters will be added. Otherwise
|
||||||
|
// a CR/LF pair will be added every 64 encoded chars.
|
||||||
|
// outputLength - if not-NULL, on output will contain the encoded length
|
||||||
|
// (not including terminating 0 char)
|
||||||
|
//
|
||||||
|
// returns the encoded buffer. Must be free'd by caller. Length is given by
|
||||||
|
// outputLength.
|
||||||
|
//
|
||||||
|
char *NewBase64Encode(
|
||||||
|
const void *buffer,
|
||||||
|
size_t length,
|
||||||
|
bool separateLines,
|
||||||
|
size_t *outputLength)
|
||||||
|
{
|
||||||
|
const unsigned char *inputBuffer = (const unsigned char *)buffer;
|
||||||
|
|
||||||
|
#define MAX_NUM_PADDING_CHARS 2
|
||||||
|
#define OUTPUT_LINE_LENGTH 64
|
||||||
|
#define INPUT_LINE_LENGTH ((OUTPUT_LINE_LENGTH / BASE64_UNIT_SIZE) * BINARY_UNIT_SIZE)
|
||||||
|
#define CR_LF_SIZE 2
|
||||||
|
|
||||||
|
//
|
||||||
|
// Byte accurate calculation of final buffer size
|
||||||
|
//
|
||||||
|
size_t outputBufferSize =
|
||||||
|
((length / BINARY_UNIT_SIZE)
|
||||||
|
+ ((length % BINARY_UNIT_SIZE) ? 1 : 0))
|
||||||
|
* BASE64_UNIT_SIZE;
|
||||||
|
if (separateLines)
|
||||||
|
{
|
||||||
|
outputBufferSize +=
|
||||||
|
(outputBufferSize / OUTPUT_LINE_LENGTH) * CR_LF_SIZE;
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
// Include space for a terminating zero
|
||||||
|
//
|
||||||
|
outputBufferSize += 1;
|
||||||
|
|
||||||
|
//
|
||||||
|
// Allocate the output buffer
|
||||||
|
//
|
||||||
|
char *outputBuffer = (char *)malloc(outputBufferSize);
|
||||||
|
if (!outputBuffer)
|
||||||
|
{
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
size_t i = 0;
|
||||||
|
size_t j = 0;
|
||||||
|
const size_t lineLength = separateLines ? INPUT_LINE_LENGTH : length;
|
||||||
|
size_t lineEnd = lineLength;
|
||||||
|
|
||||||
|
while (true)
|
||||||
|
{
|
||||||
|
if (lineEnd > length)
|
||||||
|
{
|
||||||
|
lineEnd = length;
|
||||||
|
}
|
||||||
|
|
||||||
|
for (; i + BINARY_UNIT_SIZE - 1 < lineEnd; i += BINARY_UNIT_SIZE)
|
||||||
|
{
|
||||||
|
//
|
||||||
|
// Inner loop: turn 48 bytes into 64 base64 characters
|
||||||
|
//
|
||||||
|
outputBuffer[j++] = base64EncodeLookup[(inputBuffer[i] & 0xFC) >> 2];
|
||||||
|
outputBuffer[j++] = base64EncodeLookup[((inputBuffer[i] & 0x03) << 4)
|
||||||
|
| ((inputBuffer[i + 1] & 0xF0) >> 4)];
|
||||||
|
outputBuffer[j++] = base64EncodeLookup[((inputBuffer[i + 1] & 0x0F) << 2)
|
||||||
|
| ((inputBuffer[i + 2] & 0xC0) >> 6)];
|
||||||
|
outputBuffer[j++] = base64EncodeLookup[inputBuffer[i + 2] & 0x3F];
|
||||||
|
}
|
||||||
|
|
||||||
|
if (lineEnd == length)
|
||||||
|
{
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
// Add the newline
|
||||||
|
//
|
||||||
|
outputBuffer[j++] = '\r';
|
||||||
|
outputBuffer[j++] = '\n';
|
||||||
|
lineEnd += lineLength;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (i + 1 < length)
|
||||||
|
{
|
||||||
|
//
|
||||||
|
// Handle the single '=' case
|
||||||
|
//
|
||||||
|
outputBuffer[j++] = base64EncodeLookup[(inputBuffer[i] & 0xFC) >> 2];
|
||||||
|
outputBuffer[j++] = base64EncodeLookup[((inputBuffer[i] & 0x03) << 4)
|
||||||
|
| ((inputBuffer[i + 1] & 0xF0) >> 4)];
|
||||||
|
outputBuffer[j++] = base64EncodeLookup[(inputBuffer[i + 1] & 0x0F) << 2];
|
||||||
|
outputBuffer[j++] = '=';
|
||||||
|
}
|
||||||
|
else if (i < length)
|
||||||
|
{
|
||||||
|
//
|
||||||
|
// Handle the double '=' case
|
||||||
|
//
|
||||||
|
outputBuffer[j++] = base64EncodeLookup[(inputBuffer[i] & 0xFC) >> 2];
|
||||||
|
outputBuffer[j++] = base64EncodeLookup[(inputBuffer[i] & 0x03) << 4];
|
||||||
|
outputBuffer[j++] = '=';
|
||||||
|
outputBuffer[j++] = '=';
|
||||||
|
}
|
||||||
|
outputBuffer[j] = 0;
|
||||||
|
|
||||||
|
//
|
||||||
|
// Set the output length and return the buffer
|
||||||
|
//
|
||||||
|
if (outputLength)
|
||||||
|
{
|
||||||
|
*outputLength = j;
|
||||||
|
}
|
||||||
|
return outputBuffer;
|
||||||
|
}
|
||||||
|
|
||||||
|
@implementation NSData (Base64)
|
||||||
|
|
||||||
|
//
|
||||||
|
// dataFromBase64String:
|
||||||
|
//
|
||||||
|
// Creates an NSData object containing the base64 decoded representation of
|
||||||
|
// the base64 string 'aString'
|
||||||
|
//
|
||||||
|
// Parameters:
|
||||||
|
// aString - the base64 string to decode
|
||||||
|
//
|
||||||
|
// returns the autoreleased NSData representation of the base64 string
|
||||||
|
//
|
||||||
|
+ (NSData *)dataFromBase64String:(NSString *)aString
|
||||||
|
{
|
||||||
|
NSData *data = [aString dataUsingEncoding:NSASCIIStringEncoding];
|
||||||
|
size_t outputLength;
|
||||||
|
void *outputBuffer = NewBase64Decode([data bytes], [data length], &outputLength);
|
||||||
|
NSData *result = [NSData dataWithBytes:outputBuffer length:outputLength];
|
||||||
|
free(outputBuffer);
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
// base64EncodedString
|
||||||
|
//
|
||||||
|
// Creates an NSString object that contains the base 64 encoding of the
|
||||||
|
// receiver's data. Lines are broken at 64 characters long.
|
||||||
|
//
|
||||||
|
// returns an autoreleased NSString being the base 64 representation of the
|
||||||
|
// receiver.
|
||||||
|
//
|
||||||
|
- (NSString *)base64EncodedString
|
||||||
|
{
|
||||||
|
size_t outputLength;
|
||||||
|
char *outputBuffer =
|
||||||
|
NewBase64Encode([self bytes], [self length], true, &outputLength);
|
||||||
|
|
||||||
|
NSString *result =
|
||||||
|
[[[NSString alloc]
|
||||||
|
initWithBytes:outputBuffer
|
||||||
|
length:outputLength
|
||||||
|
encoding:NSASCIIStringEncoding]
|
||||||
|
autorelease];
|
||||||
|
free(outputBuffer);
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
@end
|
14
main.m
Normal file
14
main.m
Normal file
|
@ -0,0 +1,14 @@
|
||||||
|
//
|
||||||
|
// main.m
|
||||||
|
// Base64Decoder
|
||||||
|
//
|
||||||
|
// Created by Jeena on 29.06.10.
|
||||||
|
// Copyright 2010 Jeena Paradies. All rights reserved.
|
||||||
|
//
|
||||||
|
|
||||||
|
#import <Cocoa/Cocoa.h>
|
||||||
|
|
||||||
|
int main(int argc, char *argv[])
|
||||||
|
{
|
||||||
|
return NSApplicationMain(argc, (const char **) argv);
|
||||||
|
}
|
Loading…
Add table
Add a link
Reference in a new issue