'iOS'에 해당되는 글 53건

  1. 2013.07.15 sqlite3 요약
  2. 2013.06.28 iOS UIWebView Page loading flow 테스트 결과 2
  3. 2013.06.14 XCode build variables
  4. 2013.06.12 GoogleToolBox Logging
  5. 2013.01.15 PDF 문서 생성, 출력, 변환 1
  6. 2013.01.15 CoreData 2
  7. 2012.10.29 각종 팁들. 2
  8. 2012.10.24 iOS6에서 AutoRotate 먹통현상 3
  9. 2012.10.09 초성검색 2
  10. 2012.10.09 iPhone5/iOS6 스크린 지원하기 1
iOS2013. 7. 15. 14:40


출처 : http://nickeys.tistory.com/archive/201108


SQL DB 엔진의 주 목적은 SQL문장을 평가 하는 것이다. 그걸 위해서, 개발자는 두 개의 객체에 대해 알 필요가 있다:

1) The database connection object: sqlite3
2) The prepared statement object: sqlite3_stmt

엄격히 따지자면, prepared_statement 객체는 꼭 필요한건 아니긴 하지만 편의를 위해서 wrapper 인터페이스들(sqlite3_exec 또는 sqlite3_get_table등)이 사용될 수 있다. 그래도, prepared statements에 대한 이해는 SQLite를 잘 사용하기 위해선 필수적이다.

The database connection과 prepared statement 객체들은 아래에 나열된 C/C++ 인터페이스 루틴의 소 집합에 의해 조작된다.

● sqlite3_open()
● sqlite3_prepare()
● sqlite3_step()
● sqlite3_column()
● sqlite3_finalize()
● sqlite3_close()

위의 루틴들의 리스트는 실재 존재하는 것이 아닌(actual) 개념적이라는 것을 알아 두자. 이 루틴들은 다양한 버전이 존재한다. 예를 들면, 사실 약간 다르긴 하지만 같은 용도의, 세 개의 분리된 루틴들(sqlite3_open(), sqlite3_open16(), sqlite3_open_v2())이 있고 위의 리스트 에서는 sqlite3_open()이라는 싱글 루틴을 보여준다. 위의 리스트에서 보여지는 "sqlite_column()"은 다양한 타입의 열 데이터를 추출하는데 사용되는 루틴들의 전체 군에 대한 place holder이다.

각각의 코어 인터페이스들의 요약이 있다:

sqlite3_open()   이 루틴은 SQLite DB파일을 열고 DB 연결 객체를 반환 한다. 이 루틴은 응용프로그램이 빈번하게 제일 먼저 호출 하는데, 대부분의 SQLite API들의 선행 조건이기 때문이다. 많은 SQLite 인터페이스들은 첫 번째 인자로 DB 연결에 대한 포인터를 요구한다. 이 루틴은 DB 객체의 생성자 역할을 한다고 할 수 있겠다.

sqlite3_prepare()  이 루틴은 SQL 문장을 prepared statement 객체로 전환하고 그 객체에 대한 포인터를 반환한다. 이 인터페이스는 앞에서 sqlite3_open()을 호출해서 만들어진 DB 연결 객체의 포인터와 SQL 문장을 포함한 문자열을 인자로 받는다. 이 API는 실재로 SQL 문장을 평가하는 것이 아니고 단지, SQL 문장에 대한 평가를 준비하는 단계이다.
새로운 응용 프로그램에서 sqlite3_prepare()의 사용은 추천되지 않는다는 것을 알아두라. 대신 sqlite3_prepare_v2()를 사용하는 게 낫다.

sqlite3_step()  이 루틴은 sqlite3_prepare() 인터페이스에서 생성된 prepared statement를 평가한다. 해당 문장은 결과의 첫 번째 행에 대한 포인터에 대해 평가 된다. 다음 열에 대해 계속해서 진행하려면, sqlite3_step()을 다시 호출하라. 해당 문장이 끝날 때까지sqlite3_step()을 계속 수행하라. 결과를 반환하지 않는 문장들(INSERT, UPDATE, DELETE)은 sqlite3_step()을 한번 호출해도 완료 된다.

sqlite3_column()  이 루틴은 sqlite3_step()에 의해 평가되고 있는 prepared statement에 대한 결과 집합의 현재 튜플로 부터 한 열을 반환한다. sqlite3_step()은 매번 새로운 결과 집합 튜플에서 멈추는데, 이 루틴은 해당 튜플에서 모든 열들의 값을 찾기 위해 여러번 호출 될 수 있다(한 튜플은 여러 열로 이뤄 지므로). 위에서 명시 된 것 처럼, SQLite API에는 "sqlite3_column()" 함수와 같은 것은 정말로 없다. 대신, 여기서 sqlite3_column()을 호출하는 것은 다양한 타입의 결과 집합으로 부터 한 값을 반환하는 함수들의 전체 집합에 대한 place holder라는 것이다. 그 결과(문자열이나 BLOB데이터일 경우)의 사이즈와 결과 집합에 있어 열의 수를 반환하는 함수 군에는 여러 루틴들이 있다.


● sqlite3_column_blob()
● sqlite3_column_bytes()
● sqlite3_column_bytes16()
● sqlite3_column_count()
● sqlite3_column_double()
● sqlite3_column_int()
● sqlite3_column_int64()
● sqlite3_column_text()
● sqlite3_column_text16()
● sqlite3_column_type()
● sqlite3_column_value()

sqlite3_finalize()  이 루틴은 sqlite3_prepare()의 호출로 부터 만들어진 prepared statement를 파괴한다. 모든 prepared statement는 메모리 누수를 막기 위해서 이 루틴을 호출해서 파괴되어야 한다.

sqlite3_close()  이 루틴은 이전에 sqlite3_open()을 호출함으로써 만들어진 DB연결을 닫는다. 모든 해당 연결에 관련된 prepared statement들은 해당 연결이 닫히기 전에 종결 되어야 한다.


Posted by 삼스
iOS2013. 6. 28. 19:35


iOS UIWebView Page loading flow 테스트 결과

didStartLoad delegate에서 webVIew.request.URL은 이전 페이지의 URL이거나 비어있다.

페이지로딩이 리다이렉트될때

 1. shouldStartLoading (requestURL is target page)

 2. didStartLoading

 3. shouldStartLoading (requestURL is redirect target)

 4. didFinishLoad (request.URL is redirect target)

 Note : 두번째 didStartLoading이 호출되지 않는다.


iframe을 포함한 페이지의 로딩시

 1. shouldStartLoading (requestURL is main page)

 2. didStartLoading

 3. shouldStartLoading (requestURL is one of the iframes)

 4. didStartLoading

 5. didFinishLoad

 6. didFinishLoad

Note didFinishLoad가 어떤 didStartLoad에 대응되는지 알 방법이 없음.


window.history.go(-1)가 호출될때

 1. didStartLoading

 2. didFinishLoad

 Note shouldStartLoading가 호출되지 않는다.  iOS6에서는 호출된다.


location.reload()호출시

 1. shouldStartLoading

 2. didStartLoading

 3. didFinishLoad


iframe페이지 로딩이 실패한 경우:

 1. shouldStart (main page)

 2. didStart

 3. shouldStart (iframe)

 4. didStart

 5. didFailWithError

 6. didFinish


잘못된 URL로 인해 iframe로딩이 실패한 경우

 1. shouldStart (main page)

 2. didStart

 3. shouldStart (iframe)

 5. didFailWithError

 6. didFinish

didStart가 누락된다. 해결하려면 shouldStart에서 URL을 체크하고 문제가 있으면 NO를 리턴하면 된다.


잘못된 URL접근인 경우

 1. shouldStart (main page)

 2. didFailWithError


Posted by 삼스
iOS2013. 6. 14. 12:22

Variable                                  Example
PATH                                      "/Developer/Platforms/iPhoneOS.platform/Developer/usr/bin:/Developer/usr/bin:/usr/bin:/bin:/usr/sbin:/sbin"
LANG                                      en_US.US-ASCII
IPHONEOS_DEPLOYMENT_TARGET                4.1
ACTION                                    build
AD_HOC_CODE_SIGNING_ALLOWED               NO
ALTERNATE_GROUP                           staff
ALTERNATE_MODE                            u+w,go-w,a+rX
ALTERNATE_OWNER                           username
ALWAYS_SEARCH_USER_PATHS                  YES
APPLE_INTERNAL_DEVELOPER_DIR              /AppleInternal/Developer
APPLE_INTERNAL_DIR                        /AppleInternal
APPLE_INTERNAL_DOCUMENTATION_DIR          /AppleInternal/Documentation
APPLE_INTERNAL_LIBRARY_DIR                /AppleInternal/Library
APPLE_INTERNAL_TOOLS                      /AppleInternal/Developer/Tools
APPLY_RULES_IN_COPY_FILES                 NO
ARCHS                                     "armv6 armv7"
ARCHS_STANDARD_32_64_BIT                  "armv6 armv7"
ARCHS_STANDARD_32_BIT                     "armv6 armv7"
ARCHS_UNIVERSAL_IPHONE_OS                 armv7
AVAILABLE_PLATFORMS                       "iphonesimulator macosx iphoneos"
BUILD_COMPONENTS                          "headers build"
BUILD_DIR                                 "/Users/username/Library/Developer/Xcode/DerivedData/project-dxdgjvgsvvbhowgjqouevhmvgxgf/ArchiveIntermediates/Project Distribution/BuildProductsPath"
BUILD_ROOT                                "/Users/username/Library/Developer/Xcode/DerivedData/project-dxdgjvgsvvbhowgjqouevhmvgxgf/ArchiveIntermediates/Project Distribution/BuildProductsPath"
BUILD_STYLE                    
BUILD_VARIANTS                             normal
BUILT_PRODUCTS_DIR                         "/Users/username/Library/Developer/Xcode/DerivedData/project-dxdgjvgsvvbhowgjqouevhmvgxgf/ArchiveIntermediates/Project Distribution/BuildProductsPath/Distribution-iphoneos"
CACHE_ROOT                                 /var/folders/2x/rvb2r9s16mq6r318zxvn0lk80000gn/C/com.apple.Xcode.501
CCHROOT                                    /var/folders/2x/rvb2r9s16mq6r318zxvn0lk80000gn/C/com.apple.Xcode.501
CHMOD                                      /bin/chmod
CHOWN                                      /usr/sbin/chown
CLASS_FILE_DIR                             "/Users/username/Library/Developer/Xcode/DerivedData/project-dxdgjvgsvvbhowgjqouevhmvgxgf/ArchiveIntermediates/Project Distribution/IntermediateBuildFilesPath/project.build/Distribution-iphoneos/Project.build/JavaClasses"
CLEAN_PRECOMPS                             YES
CLONE_HEADERS                              NO
CODESIGNING_FOLDER_PATH                    "/Users/username/Library/Developer/Xcode/DerivedData/project-dxdgjvgsvvbhowgjqouevhmvgxgf/ArchiveIntermediates/Project Distribution/InstallationBuildProductsLocation/Applications/project.app"
CODE_SIGNING_ALLOWED                       YES
CODE_SIGNING_REQUIRED                      YES
CODE_SIGN_CONTEXT_CLASS                    XCiPhoneOSCodeSignContext
CODE_SIGN_IDENTITY                         "iPhone Distribution"
COMBINE_HIDPI_IMAGES                       NO
COMPOSITE_SDK_DIRS                         /var/folders/2x/rvb2r9s16mq6r318zxvn0lk80000gn/C/com.apple.Xcode.501/CompositeSDKs
COMPRESS_PNG_FILES                         YES
CONFIGURATION                              Distribution
CONFIGURATION_BUILD_DIR                    "/Users/username/Library/Developer/Xcode/DerivedData/project-dxdgjvgsvvbhowgjqouevhmvgxgf/ArchiveIntermediates/Project Distribution/BuildProductsPath/Distribution-iphoneos"
CONFIGURATION_TEMP_DIR                     "/Users/username/Library/Developer/Xcode/DerivedData/project-dxdgjvgsvvbhowgjqouevhmvgxgf/ArchiveIntermediates/Project Distribution/IntermediateBuildFilesPath/project.build/Distribution-iphoneos"
CONTENTS_FOLDER_PATH                       project.app/Contents
COPYING_PRESERVES_HFS_DATA                 NO
COPY_PHASE_STRIP                           YES
COPY_RESOURCES_FROM_STATIC_FRAMEWORKS      YES
CP                                         /bin/cp
CURRENT_ARCH                               armv7
CURRENT_VARIANT                            normal
DEAD_CODE_STRIPPING                        YES
DEBUGGING_SYMBOLS                          YES
DEBUG_INFORMATION_FORMAT                   dwarf-with-dsym
DEPLOYMENT_LOCATION                        YES
DEPLOYMENT_POSTPROCESSING                  YES
DERIVED_FILES_DIR                          "/Users/username/Library/Developer/Xcode/DerivedData/project-dxdgjvgsvvbhowgjqouevhmvgxgf/ArchiveIntermediates/Project Distribution/IntermediateBuildFilesPath/project.build/Distribution-iphoneos/Project.build/DerivedSources"
DERIVED_FILE_DIR                           "/Users/username/Library/Developer/Xcode/DerivedData/project-dxdgjvgsvvbhowgjqouevhmvgxgf/ArchiveIntermediates/Project Distribution/IntermediateBuildFilesPath/project.build/Distribution-iphoneos/Project.build/DerivedSources"
DERIVED_SOURCES_DIR                        "/Users/username/Library/Developer/Xcode/DerivedData/project-dxdgjvgsvvbhowgjqouevhmvgxgf/ArchiveIntermediates/Project Distribution/IntermediateBuildFilesPath/project.build/Distribution-iphoneos/Project.build/DerivedSources"
DEVELOPER_APPLICATIONS_DIR                 /Developer/Applications
DEVELOPER_BIN_DIR                          /Developer/usr/bin
DEVELOPER_DIR                              /Developer
DEVELOPER_FRAMEWORKS_DIR                   /Developer/Library/Frameworks
DEVELOPER_FRAMEWORKS_DIR_QUOTED            "\"/Developer/Library/Frameworks\""
DEVELOPER_LIBRARY_DIR                      /Developer/Library
DEVELOPER_SDK_DIR                          /Developer/SDKs
DEVELOPER_TOOLS_DIR                        /Developer/Tools
DEVELOPER_USR_DIR                          /Developer/usr
DEVELOPMENT_LANGUAGE                       English
DOCUMENTATION_FOLDER_PATH                  project.app/English.lproj/Documentation
DO_HEADER_SCANNING_IN_JAM                  NO
DSTROOT                                    "/Users/username/Library/Developer/Xcode/DerivedData/project-dxdgjvgsvvbhowgjqouevhmvgxgf/ArchiveIntermediates/Project Distribution/InstallationBuildProductsLocation"
DWARF_DSYM_FILE_NAME                       project.app.dSYM
DWARF_DSYM_FILE_SHOULD_ACCOMPANY_PRODUCT   NO
DWARF_DSYM_FOLDER_PATH                    "/Users/username/Library/Developer/Xcode/DerivedData/project-dxdgjvgsvvbhowgjqouevhmvgxgf/ArchiveIntermediates/Project Distribution/BuildProductsPath/Distribution-iphoneos"
EFFECTIVE_PLATFORM_NAME                    -iphoneos
EMBEDDED_PROFILE_NAME                      embedded.mobileprovision
ENABLE_HEADER_DEPENDENCIES                 YES
ENABLE_OPENMP_SUPPORT                      NO
ENTITLEMENTS_ALLOWED                       YES
ENTITLEMENTS_REQUIRED                      YES
EXCLUDED_INSTALLSRC_SUBDIRECTORY_PATTERNS  ".svn CVS"
EXECUTABLES_FOLDER_PATH                    project.app/Executables
EXECUTABLE_FOLDER_PATH                     project.app
EXECUTABLE_NAME                            project
EXECUTABLE_PATH                            project.app/project
FILE_LIST                                  "/Users/username/Library/Developer/Xcode/DerivedData/project-dxdgjvgsvvbhowgjqouevhmvgxgf/ArchiveIntermediates/Project Distribution/IntermediateBuildFilesPath/project.build/Distribution-iphoneos/Project.build/Objects/LinkFileList"
FIXED_FILES_DIR                            "/Users/username/Library/Developer/Xcode/DerivedData/project-dxdgjvgsvvbhowgjqouevhmvgxgf/ArchiveIntermediates/Project Distribution/IntermediateBuildFilesPath/project.build/Distribution-iphoneos/Project.build/FixedFiles"
FRAMEWORKS_FOLDER_PATH                     project.app/Frameworks
FRAMEWORK_FLAG_PREFIX                      -framework
FRAMEWORK_SEARCH_PATHS                     "\"/Users/username/Library/Developer/Xcode/DerivedData/project-dxdgjvgsvvbhowgjqouevhmvgxgf/ArchiveIntermediates/Project Distribution/BuildProductsPath/Distribution-iphoneos\" "
FRAMEWORK_VERSION                          A
FULL_PRODUCT_NAME                          project.app
GCC3_VERSION                               3.3
GCC_C_LANGUAGE_STANDARD                    gnu99
GCC_INLINES_ARE_PRIVATE_EXTERN             YES
GCC_PFE_FILE_C_DIALECTS                    "c objective-c c++ objective-c++"
GCC_PRECOMPILE_PREFIX_HEADER               YES
GCC_PREFIX_HEADER                          project/Prefix.pch
GCC_PREPROCESSOR_DEFINITIONS               "NDEBUG DISTRIBUTION_BUILD=1 KK_TARGET=0x000F0"
GCC_SYMBOLS_PRIVATE_EXTERN                 YES
GCC_THUMB_SUPPORT                          YES
GCC_TREAT_WARNINGS_AS_ERRORS               NO
GCC_VERSION                                com.apple.compilers.llvm.clang.1_0
GCC_VERSION_IDENTIFIER                     com_apple_compilers_llvm_clang_1_0
GCC_WARN_ABOUT_RETURN_TYPE                 YES
GCC_WARN_UNUSED_FUNCTION                   YES
GCC_WARN_UNUSED_VARIABLE                   YES
GENERATE_MASTER_OBJECT_FILE                NO
GENERATE_PKGINFO_FILE                      YES
GENERATE_PROFILING_CODE                    NO
GID                                        20
GROUP                                      staff
INPUT_FILE_BASE             Default
INPUT_FILE_DIR              "/Volumes/Development/Project Game/Project-v1/images"
INPUT_FILE_NAME             Default.png
INPUT_FILE_PATH             "/Volumes/Development/Project Game/Project-v1/images/Default.png"
SCRIPT_INPUT_FILE           "/Volumes/Development/Project Game/Project-v1/images/Default.png"
SCRIPT_OUTPUT_FILE_0        "/Users/username/Library/Developer/Xcode/DerivedData/project-dxdgjvgsvvbhowgjqouevhmvgxgf/ArchiveIntermediates/Project Distribution/IntermediateBuildFilesPath/project.build/Distribution-iphoneos/Project.build/DerivedSources/Default.png"

EXCLUDED_RECURSIVE_SEARCH_PATH_SUBDIRECTORIES              "*.nib *.lproj *.framework *.gch (*) CVS .svn .git *.xcodeproj *.xcode *.pbproj *.pbxproj"
HEADERMAP_INCLUDES_FLAT_ENTRIES_FOR_TARGET_BEING_BUILT     YES
HEADERMAP_INCLUDES_FRAMEWORK_ENTRIES_FOR_ALL_PRODUCT_TYPES YES
HEADERMAP_INCLUDES_NONPUBLIC_NONPRIVATE_HEADERS            YES
HEADERMAP_INCLUDES_PROJECT_HEADERS                         YES
HEADER_SEARCH_PATHS                  "\"/Users/username/Library/Developer/Xcode/DerivedData/project-dxdgjvgsvvbhowgjqouevhmvgxgf/ArchiveIntermediates/Project Distribution/BuildProductsPath/Distribution-iphoneos/include\" "
ICONV                                /usr/bin/iconv
INFOPLIST_EXPAND_BUILD_SETTINGS      YES
INFOPLIST_FILE                       project/Resources/Info.plist
INFOPLIST_OUTPUT_FORMAT              binary
INFOPLIST_PATH                       project.app/Info.plist
INFOPLIST_PREPROCESS                 NO
INFOSTRINGS_PATH                     project.app/English.lproj/InfoPlist.strings
INPUT_FILE_REGION_PATH_COMPONENT                    
INPUT_FILE_SUFFIX                    .png
INSTALL_DIR                          "/Users/username/Library/Developer/Xcode/DerivedData/project-dxdgjvgsvvbhowgjqouevhmvgxgf/ArchiveIntermediates/Project Distribution/InstallationBuildProductsLocation/Applications"
INSTALL_GROUP                        staff
INSTALL_MODE_FLAG                    u+w,go-w,a+rX
INSTALL_OWNER                        username
INSTALL_PATH                         /Applications
INSTALL_ROOT                         "/Users/username/Library/Developer/Xcode/DerivedData/project-dxdgjvgsvvbhowgjqouevhmvgxgf/ArchiveIntermediates/Project Distribution/InstallationBuildProductsLocation"
JAVAC_DEFAULT_FLAGS                  "-J-Xms64m -J-XX:NewSize=4M -J-Dfile.encoding=UTF8"
JAVA_APP_STUB                        /System/Library/Frameworks/JavaVM.framework/Resources/MacOS/JavaApplicationStub
JAVA_ARCHIVE_CLASSES                 YES
JAVA_ARCHIVE_TYPE                    JAR
JAVA_COMPILER                        /usr/bin/javac
JAVA_FOLDER_PATH                     project.app/Java
JAVA_FRAMEWORK_RESOURCES_DIRS        Resources
JAVA_JAR_FLAGS                       cv
JAVA_SOURCE_SUBDIR                   .
JAVA_USE_DEPENDENCIES                YES
JAVA_ZIP_FLAGS                       -urg
JIKES_DEFAULT_FLAGS                  "+E +OLDCSO"
KEEP_PRIVATE_EXTERNS                 NO
LD_GENERATE_MAP_FILE                 NO
LD_MAP_FILE_PATH                     "/Users/username/Library/Developer/Xcode/DerivedData/project-dxdgjvgsvvbhowgjqouevhmvgxgf/ArchiveIntermediates/Project Distribution/IntermediateBuildFilesPath/project.build/Distribution-iphoneos/Project.build/project-LinkMap-normal-armv7.txt"
LD_NO_PIE                            NO
LD_OPENMP_FLAGS                      -fopenmp
LEGACY_DEVELOPER_DIR                 /Developer/Library/Xcode/PrivatePlugIns/Xcode3Core.ideplugin/Contents/SharedSupport/Developer
LEX                                  /Developer/usr/bin/lex
LIBRARY_FLAG_NOSPACE                 YES
LIBRARY_FLAG_PREFIX                  -l
LIBRARY_SEARCH_PATHS                 "\"/Users/username/Library/Developer/Xcode/DerivedData/project-dxdgjvgsvvbhowgjqouevhmvgxgf/ArchiveIntermediates/Project Distribution/BuildProductsPath/Distribution-iphoneos\"  \"/Volumes/Development/Project Game/Project-v1/FlurryLib\""
LINKER_DISPLAYS_MANGLED_NAMES        NO
LINK_FILE_LIST_normal_armv6          "/Users/username/Library/Developer/Xcode/DerivedData/project-dxdgjvgsvvbhowgjqouevhmvgxgf/ArchiveIntermediates/Project Distribution/IntermediateBuildFilesPath/project.build/Distribution-iphoneos/Project.build/Objects-normal/armv6/project.LinkFileList"
LINK_FILE_LIST_normal_armv7          "/Users/username/Library/Developer/Xcode/DerivedData/project-dxdgjvgsvvbhowgjqouevhmvgxgf/ArchiveIntermediates/Project Distribution/IntermediateBuildFilesPath/project.build/Distribution-iphoneos/Project.build/Objects-normal/armv7/project.LinkFileList"
LINK_WITH_STANDARD_LIBRARIES         YES
LOCALIZED_RESOURCES_FOLDER_PATH      project.app/English.lproj
LOCAL_ADMIN_APPS_DIR                 /Applications/Utilities
LOCAL_APPS_DIR                       /Applications
LOCAL_DEVELOPER_DIR                  /Library/Developer
LOCAL_LIBRARY_DIR                    /Library
MACH_O_TYPE                          mh_execute
MAC_OS_X_PRODUCT_BUILD_VERSION       11A511
MAC_OS_X_VERSION_ACTUAL              1070
MAC_OS_X_VERSION_MAJOR               1070
MAC_OS_X_VERSION_MINOR               0700
NATIVE_ARCH                          armv6
NATIVE_ARCH_32_BIT                   i386
NATIVE_ARCH_64_BIT                   x86_64
NATIVE_ARCH_ACTUAL                   x86_64
NO_COMMON                            YES
OBJECT_FILE_DIR                      "/Users/username/Library/Developer/Xcode/DerivedData/project-dxdgjvgsvvbhowgjqouevhmvgxgf/ArchiveIntermediates/Project Distribution/IntermediateBuildFilesPath/project.build/Distribution-iphoneos/Project.build/Objects"
OBJECT_FILE_DIR_normal               "/Users/username/Library/Developer/Xcode/DerivedData/project-dxdgjvgsvvbhowgjqouevhmvgxgf/ArchiveIntermediates/Project Distribution/IntermediateBuildFilesPath/project.build/Distribution-iphoneos/Project.build/Objects-normal"
OBJROOT                              "/Users/username/Library/Developer/Xcode/DerivedData/project-dxdgjvgsvvbhowgjqouevhmvgxgf/ArchiveIntermediates/Project Distribution/IntermediateBuildFilesPath"
ONLY_ACTIVE_ARCH                     NO
OPTIMIZATION_LEVEL                   0
OS                                   MACOS
OSAC                                 /usr/bin/osacompile
OTHER_CFLAGS                         -DNS_BLOCK_ASSERTIONS=1
OTHER_CPLUSPLUSFLAGS                 -DNS_BLOCK_ASSERTIONS=1
OTHER_INPUT_FILE_FLAGS                    
OTHER_LDFLAGS                        -lz
PACKAGE_TYPE                         com.apple.package-type.wrapper.application
PASCAL_STRINGS                       YES
PATH_PREFIXES_EXCLUDED_FROM_HEADER_DEPENDENCIES  "/usr/include /usr/local/include /System/Library/Frameworks /System/Library/PrivateFrameworks /Developer/Headers /Developer/SDKs /Developer/Platforms"
PBDEVELOPMENTPLIST_PATH              project.app/pbdevelopment.plist
PFE_FILE_C_DIALECTS                  "c objective-c c++ objective-c++"
PKGINFO_FILE_PATH                    "/Users/username/Library/Developer/Xcode/DerivedData/project-dxdgjvgsvvbhowgjqouevhmvgxgf/ArchiveIntermediates/Project Distribution/IntermediateBuildFilesPath/project.build/Distribution-iphoneos/Project.build/PkgInfo"
PKGINFO_PATH                         project.app/PkgInfo
PLATFORM_DEVELOPER_APPLICATIONS_DIR  /Developer/Platforms/iPhoneOS.platform/Developer/Applications
PLATFORM_DEVELOPER_BIN_DIR           /Developer/Platforms/iPhoneOS.platform/Developer/usr/bin
PLATFORM_DEVELOPER_LIBRARY_DIR       /Developer/Library/Xcode/PrivatePlugIns/Xcode3Core.ideplugin/Contents/SharedSupport/Developer/Library
PLATFORM_DEVELOPER_SDK_DIR           /Developer/Platforms/iPhoneOS.platform/Developer/SDKs
PLATFORM_DEVELOPER_TOOLS_DIR         /Developer/Platforms/iPhoneOS.platform/Developer/Tools
PLATFORM_DEVELOPER_USR_DIR           /Developer/Platforms/iPhoneOS.platform/Developer/usr
PLATFORM_DIR                         /Developer/Platforms/iPhoneOS.platform
PLATFORM_NAME                        iphoneos
PLATFORM_PREFERRED_ARCH              i386
PLATFORM_PRODUCT_BUILD_VERSION       8H7
PLIST_FILE_OUTPUT_FORMAT             binary
PLUGINS_FOLDER_PATH                  project.app/PlugIns
PRECOMPS_INCLUDE_HEADERS_FROM_BUILT_PRODUCTS_DIR                    YES
PRECOMP_DESTINATION_DIR              "/Users/username/Library/Developer/Xcode/DerivedData/project-dxdgjvgsvvbhowgjqouevhmvgxgf/ArchiveIntermediates/Project Distribution/IntermediateBuildFilesPath/project.build/Distribution-iphoneos/Project.build/PrefixHeaders"
PRESERVE_DEAD_CODE_INITS_AND_TERMS   NO
PRIVATE_HEADERS_FOLDER_PATH          project.app/PrivateHeaders
PRODUCT_NAME                         project
PRODUCT_SETTINGS_PATH                "/Volumes/Development/Project Game/Project-v1/project/Resources/Info.plist"
PRODUCT_TYPE                         com.apple.product-type.application
PROFILING_CODE                       NO
PROJECT                              project
PROJECT_DERIVED_FILE_DIR             "/Users/username/Library/Developer/Xcode/DerivedData/project-dxdgjvgsvvbhowgjqouevhmvgxgf/ArchiveIntermediates/Project Distribution/IntermediateBuildFilesPath/project.build/DerivedSources"
PROJECT_DIR                          "/Volumes/Development/Project Game/Project-v1"
PROJECT_FILE_PATH                    "/Volumes/Development/Project Game/Project-v1/project.xcodeproj"
PROJECT_NAME                         project
PROJECT_TEMP_DIR                     "/Users/username/Library/Developer/Xcode/DerivedData/project-dxdgjvgsvvbhowgjqouevhmvgxgf/ArchiveIntermediates/Project Distribution/IntermediateBuildFilesPath/project.build"
PROVISIONING_PROFILE_REQUIRED        YES
PUBLIC_HEADERS_FOLDER_PATH           project.app/Headers
RECURSIVE_SEARCH_PATHS_FOLLOW_SYMLINKS   YES
REMOVE_CVS_FROM_RESOURCES            YES
REMOVE_GIT_FROM_RESOURCES            YES
REMOVE_SVN_FROM_RESOURCES            YES
RESOURCE_RULES_REQUIRED              YES
REZ_COLLECTOR_DIR                    "/Users/username/Library/Developer/Xcode/DerivedData/project-dxdgjvgsvvbhowgjqouevhmvgxgf/ArchiveIntermediates/Project Distribution/IntermediateBuildFilesPath/project.build/Distribution-iphoneos/Project.build/ResourceManagerResources"
REZ_OBJECTS_DIR                      "/Users/username/Library/Developer/Xcode/DerivedData/project-dxdgjvgsvvbhowgjqouevhmvgxgf/ArchiveIntermediates/Project Distribution/IntermediateBuildFilesPath/project.build/Distribution-iphoneos/Project.build/ResourceManagerResources/Objects"
REZ_SEARCH_PATHS                     "\"/Users/username/Library/Developer/Xcode/DerivedData/project-dxdgjvgsvvbhowgjqouevhmvgxgf/ArchiveIntermediates/Project Distribution/BuildProductsPath/Distribution-iphoneos\" "
RUN_CLANG_STATIC_ANALYZER            NO
SCAN_ALL_SOURCE_FILES_FOR_INCLUDES   NO
SCRIPTS_FOLDER_PATH                  project.app/Scripts
SCRIPT_INPUT_FILE                    "/Volumes/Development/Project Game/Project-v1/fonts/helvetica-black-hd.png"
SCRIPT_OUTPUT_FILE_0                 "/Users/username/Library/Developer/Xcode/DerivedData/project-dxdgjvgsvvbhowgjqouevhmvgxgf/ArchiveIntermediates/Project Distribution/IntermediateBuildFilesPath/project.build/Distribution-iphoneos/Project.build/DerivedSources/helvetica-black-hd.png"
SCRIPT_OUTPUT_FILE_COUNT             1
SDKROOT                              /Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS4.3.sdk
SDK_DIR                              /Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS4.3.sdk
SDK_NAME                             iphoneos4.3
SDK_PRODUCT_BUILD_VERSION            8H7
SED                                  /usr/bin/sed
SEPARATE_STRIP                       NO
SEPARATE_SYMBOL_EDIT                 NO
SET_DIR_MODE_OWNER_GROUP            YES
SET_FILE_MODE_OWNER_GROUP           NO
SHALLOW_BUNDLE                      YES
SHARED_DERIVED_FILE_DIR             "/Users/username/Library/Developer/Xcode/DerivedData/project-dxdgjvgsvvbhowgjqouevhmvgxgf/ArchiveIntermediates/Project Distribution/BuildProductsPath/Distribution-iphoneos/DerivedSources"
SHARED_FRAMEWORKS_FOLDER_PATH       project.app/SharedFrameworks
SHARED_PRECOMPS_DIR                 /Users/username/Library/Developer/Xcode/DerivedData/project-dxdgjvgsvvbhowgjqouevhmvgxgf/Build/PrecompiledHeaders
SHARED_SUPPORT_FOLDER_PATH          project.app/SharedSupport
SKIP_INSTALL                        NO
SOURCE_ROOT                         "/Volumes/Development/Project Game/Project-v1"
SRCROOT                             "/Volumes/Development/Project Game/Project-v1"
STRINGS_FILE_OUTPUT_ENCODING        binary
STRIP_INSTALLED_PRODUCT             YES
STRIP_STYLE                         all
SUPPORTED_DEVICE_FAMILIES           1,2
SUPPORTED_PLATFORMS                 "iphonesimulator iphoneos"
SYMROOT                             "/Users/username/Library/Developer/Xcode/DerivedData/project-dxdgjvgsvvbhowgjqouevhmvgxgf/ArchiveIntermediates/Project Distribution/BuildProductsPath"
SYSTEM_ADMIN_APPS_DIR               /Applications/Utilities
SYSTEM_APPS_DIR                     /Applications
SYSTEM_CORE_SERVICES_DIR            /System/Library/CoreServices
SYSTEM_DEMOS_DIR                    /Applications/Extras
SYSTEM_DEVELOPER_APPS_DIR           /Developer/Applications
SYSTEM_DEVELOPER_BIN_DIR            /Developer/usr/bin
SYSTEM_DEVELOPER_DEMOS_DIR          "/Developer/Applications/Utilities/Built Examples"
SYSTEM_DEVELOPER_DIR                /Developer
SYSTEM_DEVELOPER_DOC_DIR            "/Developer/ADC Reference Library"
SYSTEM_DEVELOPER_GRAPHICS_TOOLS_DIR "/Developer/Applications/Graphics Tools"
SYSTEM_DEVELOPER_JAVA_TOOLS_DIR     "/Developer/Applications/Java Tools"
SYSTEM_DEVELOPER_PERFORMANCE_TOOLS_DIR   "/Developer/Applications/Performance Tools"
SYSTEM_DEVELOPER_RELEASENOTES_DIR   "/Developer/ADC Reference Library/releasenotes"
SYSTEM_DEVELOPER_TOOLS              /Developer/Tools
SYSTEM_DEVELOPER_TOOLS_DOC_DIR      "/Developer/ADC Reference Library/documentation/DeveloperTools"
SYSTEM_DEVELOPER_TOOLS_RELEASENOTES_DIR   "/Developer/ADC Reference Library/releasenotes/DeveloperTools"
SYSTEM_DEVELOPER_USR_DIR            /Developer/usr
SYSTEM_DEVELOPER_UTILITIES_DIR      /Developer/Applications/Utilities
SYSTEM_DOCUMENTATION_DIR            /Library/Documentation
SYSTEM_LIBRARY_DIR                  /System/Library
TARGETED_DEVICE_FAMILY              1
TARGETNAME                          Project
TARGET_BUILD_DIR                    "/Users/username/Library/Developer/Xcode/DerivedData/project-dxdgjvgsvvbhowgjqouevhmvgxgf/ArchiveIntermediates/Project Distribution/InstallationBuildProductsLocation/Applications"
TARGET_NAME                         Project
TARGET_TEMP_DIR                     "/Users/username/Library/Developer/Xcode/DerivedData/project-dxdgjvgsvvbhowgjqouevhmvgxgf/ArchiveIntermediates/Project Distribution/IntermediateBuildFilesPath/project.build/Distribution-iphoneos/Project.build"
TEMP_DIR                            "/Users/username/Library/Developer/Xcode/DerivedData/project-dxdgjvgsvvbhowgjqouevhmvgxgf/ArchiveIntermediates/Project Distribution/IntermediateBuildFilesPath/project.build/Distribution-iphoneos/Project.build"
TEMP_FILES_DIR                      "/Users/username/Library/Developer/Xcode/DerivedData/project-dxdgjvgsvvbhowgjqouevhmvgxgf/ArchiveIntermediates/Project Distribution/IntermediateBuildFilesPath/project.build/Distribution-iphoneos/Project.build"
TEMP_FILE_DIR                       "/Users/username/Library/Developer/Xcode/DerivedData/project-dxdgjvgsvvbhowgjqouevhmvgxgf/ArchiveIntermediates/Project Distribution/IntermediateBuildFilesPath/project.build/Distribution-iphoneos/Project.build"
TEMP_ROOT                           "/Users/username/Library/Developer/Xcode/DerivedData/project-dxdgjvgsvvbhowgjqouevhmvgxgf/ArchiveIntermediates/Project Distribution/IntermediateBuildFilesPath"
TEST_AFTER_BUILD                    NO
UID                                 501
UNLOCALIZED_RESOURCES_FOLDER_PATH   project.app    UNSTRIPPED_PRODUCT           NO
USER                         username
USER_APPS_DIR                /Users/username/Applications
USER_HEADER_SEARCH_PATHS     project/libs
USER_LIBRARY_DIR             /Users/username/Library
USE_DYNAMIC_NO_PIC           YES
USE_HEADERMAP                YES
USE_HEADER_SYMLINKS          NO
VALIDATE_PRODUCT             YES
VALID_ARCHS                  "armv6 armv7"
VERBOSE_PBXCP                NO
VERSIONPLIST_PATH            project.app/version.plist
VERSION_INFO_BUILDER         username
VERSION_INFO_FILE            project_vers.c
VERSION_INFO_STRING          "\"@(#)PROGRAM:project  PROJECT:project-\""
WRAPPER_EXTENSION            app
WRAPPER_NAME                 project.app
WRAPPER_SUFFIX               .app
XCODE_APP_SUPPORT_DIR        /Developer/Library/Xcode
XCODE_PRODUCT_BUILD_VERSION  4B110
XCODE_VERSION_ACTUAL         0410
XCODE_VERSION_MAJOR          0400
XCODE_VERSION_MINOR          0410
YACC                        /Developer/usr/bin/yacc
출처: https://samse.tistory.com/entry/XCode-build-variables [고 투 더 멘토:티스토리]

 

Posted by 삼스
iOS2013. 6. 12. 10:37


Google Tool Box for Mac에서 제공하는 _GTMDebugLog

log4j를 cocoa에 포팅한 log4cocoa 정도가 있겠다.


먼저 GTM의 logging방식을 살펴보겠다.


GTM for Mac은 구글개발자들이 사용하는 맥개발용 라이브러리들을 모아놓은 프로젝트이다.

이 중에 로그를 위해 만들어 놓은게 _GTMDevLog, _GTMDevAssert인데 기능자체는 상당히 간단하다.

GTMDefines.h에 다음과 같이 정의되어 있다.

#ifndef _GTMDevLog

#ifdef DEBUG

  #define _GTMDevLog(...) NSLog(__VA_ARGS__)

#else

  #define _GTMDevLog(...) do { } while (0)

#endif

#endif // _GTMDevLog

#ifndef _GTMDevAssert

// we directly invoke the NSAssert handler so we can pass on the varargs

// (NSAssert doesn't have a macro we can use that takes varargs)

#if !defined(NS_BLOCK_ASSERTIONS)

  #define _GTMDevAssert(condition, ...)                                       \

    do {                                                                      \

      if (!(condition)) {                                                     \

        [[NSAssertionHandler currentHandler]                                  \

            handleFailureInFunction:[NSString stringWithUTF8String:__PRETTY_FUNCTION__] \

                               file:[NSString stringWithUTF8String:__FILE__]  \

                         lineNumber:__LINE__                                  \

                        description:__VA_ARGS__];                             \

      }                                                                       \

    } while(0)

#else // !defined(NS_BLOCK_ASSERTIONS)

  #define _GTMDevAssert(condition, ...) do { } while (0)

#endif // !defined(NS_BLOCK_ASSERTIONS)

#endif // _GTMDevAssert


NSLog와 NSAssertionHandler를 연결해 두었고 DEBUG빌드시에만 실제 로거가 동작하도록 되어 있다.

다만 _GTMDevLog를 실제 프로젝트에서 리플랙션을 통해 동작방식을 정의할 수 있도록 샘플이 있다.


GTM_Prefix.pch에 다음과 같이 변경하여 오버라이딩이 가능하다.

// This turns on unit test logging so that we can track unittests if we are

// doing them. See GTMUnitTestDevLog.h for details.

// (_GTMUnitTestDevLog comes from GTMDevLogUnitTestingBridge.m)

#define _GTMDevLog _GTMUnitTestDevLog


별도의 브릿지역할을 하는 GTMDevLogUnitTestingBridge.m에 다음과 같이 정의되어 있는데 GTMUnitTestDevLog라는 클래스명으로 리플렉션하여 로그동작을 오버라이드 하고 있다.

void _GTMUnitTestDevLog(NSString *format, ...) {

  Class devLogClass = NSClassFromString(@"GTMUnitTestDevLog");

  va_list argList;

  va_start(argList, format);

  if (devLogClass) {

    [devLogClass log:format args:argList];

  } else {

    NSLogv(format, argList); // COV_NF_LINE the class is in all our unittest setups

  }

  va_end(argList);

}

이 로깅 방식은 사용이 간단하지만 로그레벨을 부여할수 없는것이 단점이다.






Posted by 삼스
iOS2013. 1. 15. 19:58


http://cafe.daum.net/iLogic/915W/20?docid=1KHkj915W2020110321201150

PDF 문서 생성, 출력, 변환

PDF 문서는 소형 프로그래밍 언어로 작성된 명령들로 해상도 독립 벡터 그래픽, 텍스트, 이미지를 저장한다. PDF 문서는 이미지와 텍스트를 여러 페이지 포함할 수 있다. PDF 는 크로스 플랫폼, 읽기 전용 문서, 해상도 독립 그래픽 드로잉에 유용하다.

모든 어플에 대해 Quartz 는 그림 13-1 처럼 어플의 드로잉 연산을 보존하는 충실도가 높은 PDF 문서를 생성한다. 결과 PDF 는 시스템의 다른 일부나 외우 업체 제품으로 특정 프린터나 웹을 위해 특정한 목적으로 최적화될 수도 있다. Quartz 에서 생성된 PDF 문서는 미리보기나 Acrobat 에서 볼 수 있다.

그림 13-1  Quartz 는 고해상도 PDF 문서를 생성한다.

Quartz 는 "디지털 종이" 로 PDF 를 사용할 뿐만 아니라 PDF 를 표시하고 생성하고, PDF 관련 작업들을 사용할 수 있는 수많은 API 함수중 일부를 포함하고 있다. 다음 내용을 다룬다.

PDF 언어와 문법을 포함한 PDF 에 대한 자세한 정보는 PDF 레퍼런스 네 번째 판인 버전 1.5 를 참고해라.

PDF 열기와 화면 출력

Quartz 는 PDF 문서를 표현하기 위해 CGPDFDocumentRef 데이터 타입을 제공한다.CGPDFDocumentCreateWithProvider 함수나 CGPDFDocumentCreateWithURL 함수를 사용하여 CGPDFDocument 객체를 생성해야 한다. CGPDFDocument 객체를 생성한 후, 그래픽 콘텍스트에 드로잉할 수 있다. 그림 13-2 는 PDFViewer 샘플 어플에서 표시된 PDF 문서를 보여준다. Xcode 도구 CD 를 인스톨할 후, 이 어플의 Xcode 프로젝트를 다음 위치에서 찾을 수 있다.

/Developer/Examples/Quartz/PDF/PDFViewer

그림 13-2  PDFViewer 샘플 어플에 의해 표시된 PDF 문서

코드 13-1 은 CGPDFDocument 객체를 생성하고 문서내의 페이지수를 얻는 방법을 보여준다.

코드 13-1  PDF 파일로부터 CGPDFDocument 객체를 생성하는 함수

CGPDFDocumentRef MyGetPDFDocumentRef (const char *filename)
{
    CFStringRef path;
    CFURLRef url;
    CGPDFDocumentRef document;
 
    path = CFStringCreateWithCString (NULL, filename,
                         kCFStringEncodingUTF8);
    url = CFURLCreateWithFileSystemPath (NULL, path, // 1
                        kCFURLPOSIXPathStyle, 0);
    CFRelease (path);
    document = CGPDFDocumentCreateWithURL (url);// 2
    CFRelease(url);
    count = CGPDFDocumentGetNumberOfPages (document);// 3
    if (count == 0) {
        printf("`%s' needs at least one page!", filename);
        return NULL;
    }
    return document;
}

코드 설명:

  1. 디스플레이할 PDF 파일의 파일명을 나타내는 CFString 객체로 부터 CFURL 객체를 생성하기 위해 코어 파운데이션 함수를 호출해야 한다.

  2. CFURL 객체로 부터 CGPDFDocument 객체를 생성한다.

  3. 다음 코드에서 문서가 최소 한 페이지를 갖고 있는지 확인하기 위해서 PDF 의 페이지 수를 얻는다.

코드 13-2는 PDF 페이지를 그래픽 콘텍스트에 드로잉하는 방법을 보여준다.

코드 13-2  PDF 페이지를 드로잉하는 함수

void MyDisplayPDFPage (CGContextRef myContext,
                    size_t pageNumber,
                    const char *filename)
{
    CGPDFDocumentRef document;
    CGPDFPageRef page;
    CGRect box;
 
    document = MyGetPDFDocumentRef (filename);// 1
    page = CGPDFDocumentGetPage (document, pageNumber);// 2
    CGContextDrawPDFPage (myContext, page);// 3
    CGPDFDocumentRelease (document);// 4
}

코드 설명:

  1. 대입한 파일이름으로 부터 CGPDFDocument 객체를 생성하기 위해 함수를 호출한다.

  2. PDF 문서로 부터 명시한 페이지 번호의 페이지를 얻는다.  

  3. CGContextDrawPDFPage 함수를 호출하여 PDF 파일로 부터 명시한 페이지를 드로잉한다. 그래픽 콘텍스트와 드로잉할 페이지를 대입해야만 한다. iPhone OS 나 Mac OS X v10.3 이후 버전에서 어플을 수행하려면, 이전의CGContextDrawPDFDocument 함수대신에 이 함수를 사용하는 것이 좋다.

  4. CGPDFDocument 객체를 해제한다.

PDF 페이지용 변환을 생성

Quartz 는 PDF 페이지의 한 상자를 대입한 사각형으로 매핑하는 affine 변환을 생성하는 CGPDFPageGetDrawingTransform함수를 제공한다. 이 함수의 형식은 다음과 같다.

CGAffineTransform CGPDFPageGetDrawingTransform (
        CGPPageRef page,
        CGPDFBox box,
        CGRect rect,
        int rotate,
        bool preserveAspectRatio
);

함수는 다음 알고리즘을 사용하여 affine 변환을 리턴한다.

  • 파라미터에 대입하는 media, crop, bleed, trim, art 와 같은 PDF 박스의 타입과 명시된 PDF 페이지의 /MediaBox 엔트리와 관련된 사각형을 교차시킨다. 교차하여 교집합 부분이 유효한 결과 사각형이 된다.

  • PDF 페이지의 /Rotate 엔트리에 의해 명시된 값에 의해서 유효 사각형을 회전시킨다.

  • 결과 사각형을 파라미터로 제공한 사각형의 중심으로 옮긴다.

  • 대입한 rotate 파라미터의 값이 0 이 아니고 90 의 배수면, 함수는 대입한 각도로 유효 사각형을 회전시킨다. 양수 값은 오른쪽으로 사각형을 회전시키며, 음수 값은 사각형을 왼쪽으로 회전시킨다. 전달하는 각도는 라디안 값이 아니다. PDF 페이지의 /Rotate 엔트리도 회전을 포함한다. 대입하는 rotate 파라미터는 /Rotate 엔트리와 조합된다.

  • 필요하면 유효 사각형을 확대/축소한다. 그래서, 대입한 사각형의 가장자리와 일치시킨다. 

  • preserveAspectRatio 파라미터에 true 를 전달하여 가로 세로의 비를 보존한다면, 마지막 사각형은 rect 파라미터에서 명시된 사각형의 제한된 가장자리와 일치시킨다.

예를 들어 그림 13-3 에서 보이는 PDF 파일을 보여주는 어플을 작성할 때 이 함수를 사용할 수 있다. 왼쪽과 오른쪽으로 회전하는 기능을 제공하고자 한다면, 현재 윈도우 크기와 회전하는 설정에 대한 적절한 변환을 계산하기 위해CGPDFPageGetDrawingTransform 를 호출할 수 있다.

그림 13-3  오른쪽으로 90 도 회전된 PDF 페이지

코드 13-3 은 함수에 전달된 파라미터를 사용하여 PDF 페이지용 affine 변환을 생성하는 함수가 변환을 적용하고 PDF 페이지를 드로잉하는 방법을 보여준다.

코드 13-3  PDF 페이지용 affine 변환 생성

void MyDrawPDFPageInRect (CGContextRef context,
                    CGPDFPageRef page,
                    CGPDFBox box,
                    CGRect rect,
                    int rotation,
                    bool preserveAspectRatio)
{
    CGAffineTransform m;
 
    m = CGPDFPageGetDrawingTransform (page, box, rect, rotation,// 1
                                    preserveAspectRato);
    CGContextSaveGState (context);// 2
    CGContextConcatCTM (context, m);// 3
    CGContextClipToRect (context,CGPDFPageGetBoxRect (page, box));// 4
    CGContextDrawPDFPage (context, page);// 5
    CGContextRestoreGState (context);// 6
}

코드 설명:

  1. 함수에 제공된 파라미터로 부터 affine 변환을 생성한다.

  2. 그래픽 상태를 저장한다.

  3. CTM 을 affine 변환과 연관시킨다.

  4. 그래픽 콘텍스트를 box 파라미터에 대입된 사각형으로 자른다. CGPDFPageGetBoxRect 함수는 대입한 상수kCGPDFMediaBoxkCGPDFCropBoxkCGPDFBleedBox,kCGPDFTrimBoxkCGPDFArtBox 과 관련된 (media, crop, bleed, trim, art box) 형 사각형을 경계로하는 페이지를 얻는다.

  5. PDF 페이지를 변환되고 잘린 콘텍스트에 드로잉한다.

  6. 그래픽 상태를 복원한다.

PDF 파일 생성

 PDF 파일을 그래픽 콘텍스트에 드로잉하는 것과 같이 Quartz 2D 를 사용하여 PDF 파일을 생성하는 것은 쉽다. PDF 파일의 위치를 명시하고, PDF 그래픽 콘텍스트를 설정하고, 다른 그래픽 콘텍스트에서 사용했던 동일한 드로잉 루틴을 사용하게 된다. 코드 13-4 의 MyCreatePDFFile 함수는 PDF 를 생성하기 위해 사용하는 모든 작업을 보여줄 것이다.

코드는 CGContextBeginPage 함수와 CGContextEndPage 함수를 호출하여 PDF 페이지를 묘사한다. iPhone OS 와 Mac OS X v10.4 이후 버전에서는, CGPDFContextBeginPage 함수와 CGPDFContextEndPage 함수를 대신 사용할 수 있다. 새로 추가된 함수들의 장점은 media, crop bleed, trim, art box 의 페이지 속성을 대입하기 위해 CFDictionary 를 전달할 수 있다는 점이다.

사전용 키 상수의 목록과 이들에 대한 정보는 CGPDFContext 레퍼런스 를 참고해라.

코드 13-4  PDF 를 생성하는 함수

void MyCreatePDFFile (CGRect pageRect, const char *filename)// 1
{
    CGContextRef pdfContext;
    CFStringRef path;
    CFURLRef url;
    CFMutableDictionaryRef myDictionary = NULL;
 
    path = CFStringCreateWithCString (NULL, filename, // 2
                                kCFStringEncodingUTF8);
    url = CFURLCreateWithFileSystemPath (NULL, path, // 3
                     kCFURLPOSIXPathStyle, 0);
    CFRelease (path);
    myDictionary = CFDictionaryCreateMutable(NULL, 0,
                        &kCFTypeDictionaryKeyCallBacks,
                        &kCFTypeDictionaryValueCallBacks); // 4
    CFDictionarySetValue(myDictionary, kCGPDFContextTitle, CFSTR("My PDF File"));
    CFDictionarySetValue(myDictionary, kCGPDFContextCreator, CFSTR("My Name"));
    pdfContext = CGPDFContextCreateWithURL (url, &pageRect, myDictionary); // 5intent 
    CFRelease(myDictionary);
    CFRelease(url);
    CGContextBeginPage (pdfContext, &pageRect); // 6
    myDrawContent (pdfContext);// 7
    CGContextEndPage (pdfContext);// 8
    CGContextRelease (pdfContext);// 9
}

코드 설명:

  1. PDF 페이지의 크기를 나타내는 사각형과 파일명을 나타내는 문자열을 파라미터로 받는다.

  2. MyCreatePDFFile 함수에 전달된 파일명으로 부터 CFString 객체를 생성한다.

  3. CFString 객체로 부터 CFURL 객체를 생성한다.

  4. 메타데이터를 얻기 위해서 빈 CFDictionary 객체를 생성한다. 다음 두 줄은 타이틀과 작가 이름을 추가하는 것이다.CFDictionarySetValue 함수를 사용하여 여러 키-값 쌍을 추가할 수 있다. 사전을 생성하는데 대한 자세한 정보는CFDictionary 레퍼런스 을 참고해라.

  5. 다음의 3 개의 파라미터를 전달하여 PDF 그래픽 콘텍스트를 생성한다.

    • PDF 데이터의 위치를 나타내는 CFURL 객체.

    • PDF 페이지의 기본 크기와 위치를 정의하는 사각형에 대한 포인터. 사각형의 원점은 일반적으로 (0, 0) 이다. Quartz 는 이 사각형을 페이지의 미디어 박스의 기본 영역으로 사용한다. NULL 을 전달하면, Quartz 는 8.5 x 11 인치(612 x 792 픽셀)의 기본 페이지 크기를 사용한다.

    • PDF 메타데이터를 포함하는 CFDictionary 객체. 추가할 메타데이터가 없다면 NULL 을 전달한다. 

      iPhone OS 와 Mac OS X v10.4 에서는 부분 형식, 조건, 조건 식별자, 레지스트리 이름, 목적 파일 프로필, 목적 장치나 제조 조건에 관한 추가 정보나 설명을 포함하는 사람이 읽ㅅ을 수 있는 문자열 등의 출력 옵션을 표시하기 위해 CFDictionary 객체를 사용할 수 있다. 출력 옵션에 대한 자세한 정보는 CGPDFContext 레퍼런스를 참고해라.

  6. 페이지의 시작을 나타낸다. PDF 와 같은 다중 페이지를 제공하는 그래픽 콘텍스트를 사용할 때, 출력에서 페이지의 경계를 나타내기 위해 CGContextEndPage 와 CGContextBeginPage 함수를 호출해야 한다. Quartz 는 페이지 기반 콘텍스트에서 페이지의 경계를 넘어가는 외부에서 실행된 모든 드로잉 연산은 무시한다. 

    iPhone OS 와 Mac OS X v10.4 이후 버전에서, 페이지의 속성을 정의하기 위해 키-값 쌍을 포함하는 그래픽 콘텍스트와 CFDictionary 를 제공하는 CGPDFContextBeginPage 함수를 대신 사용할 수 있다.

  7. PDF 콘텍스트에 콘텢츠를 드롱이하기 위해 어플에서 정의한 함수를 호출한다. 여기에 드로잉 루틴들을 작성하면 된다.

  8. 페이지 기반 그래픽 콘텍스트에 페이지가 끝났다고 알린다.

    iPhone OS 와 Mac OS X v10.4 이후 버전에서 이전에 CGPDFContextBeginPage 함수를 호출했다면, 페이지의 끝을 알리기 위해 CGPDFContextEndPage 함수를 사용해야만 했다.

  9. PDF 콘텍스트를 해제한다.

링크 추가

생성한 PDF 콘텍스트에 링크와 지점을 추가할 수 있다. iPhone OS 와 Mac OS X v10.4 부터, Quartz 는 링크에 관한 정보와 파라미터로 PDF 그래픽 콘텍스트를 갖는 다음의 3 가지 함수를 제공한다.

  • CGPDFContextSetURLForRect 는 현재 PDF 페이지에서 사각형을 클릭할 때 오픈할 URL 을 명시하도록 한다.

  • CGPDFContextSetDestinationForRect 는 현재 PDF 페이지에서 사용자가 사각형을 클릭할 때 목적지로 이동하도록 설정한다. 목적지 이름을 명시해야 한다.

  • CGPDFContextAddDestinationAtPoint 는 현재 PDF 페이지에서 점을 클릭할 때 이동할 목적지를 설정하도록 한다. 목적지 이름을 명시해야 한다.

PDF 콘텐츠 보호

iPhone OS 와 Mac OS X v10.4 부터 가능한 PDF 콘텐츠를 보호하려면, CGPDFContextCreate 함수에 전달할 보조 사전에서 명시할 수 있는 여러 보안 옵션들이 존재한다. 소유자 패스워드, 사용자 패스워드, PDF 가 보조 사전에 다음 키를 포함하여 복사될 수 있는지 프린트될 수 있는지를 설정할 수 있다. 

  • kCGPDFContextOwnerPassword 는 PDF 문서의 소유자 패스워드를 정의할 때 사용한다. 이 키가 대입되면, 문서는 소유자 패스워드를 값으로 사용하여 암호화된다. 그렇지 않으면, 문서는 암호화되지 않는다. 이 키 값은 ASCII 로 표현될 수 있는 CFString 객체가 되어야 한다. 처음 32 바이트만 패스워드로 사용된다. 이 키의 디폴트 값은 없다. 이 키의 값이 ASCII 로 표현될 수 없다면, 문서는 생성되지 않으며 생성 함수는 NULL 을 리턴한다. iPhone OS 와 Mac OS X v10.4 에서 Quartz 는 40 비트 암호화를 사용한다.

  • kCGPDFContextUserPassword 는 PDF 문서의 사용자 패스워드를 정의한다. 문서가 암호화되면, 이 키 값은 문서의 사용자 패스워드가 된다. 이 값이 명시되지 않으면 사용자 패스워드는 빈 문자열이 된다. 이 키 값은 ASCII 암호화로 표현될 수 있는 CFString 객체가 되어야 한다. 첫 번째 32 바이트만 패스워드로 사용된다. 이 키 값이 ASCII 로 표현될 수 없으면, 문서는 생성되지 않고, 생성함수는 NULL 을 리턴한다.

  • kCGPDFContextAllowsPrinting 는 문서가 사용자 패스워드로 비공개가 아닐 때 프린트할 수 있는지를 나타낸다. 이 키 값은 CFBoolean 객체가 되어야 한다. 이 키의 디폴드 값은 kCFBooleanTrue 이다.

  • kCGPDFContextAllowsCopying 는 문서가 사용자 패스워드로 비공개가 아닌 경우 복사될 수 있는지를 나타낸다. 이 키 값은 CFBoolean 객체이어야 한다. 이 키의 디폴트 값은 kCFBooleanTrue 이다.

다음 강좌의 코드 14-4 는 PDF 문서가 공개인지 비공개인지를 검사하고, 패스워드를 사용하여 문서를 오픈하는 코드를 보여줄 것이다.

 

Posted by 삼스
iOS2013. 1. 15. 17:11


출처 : http://blog.naver.com/PostView.nhn?blogId=gigar&logNo=60130114031


[AppDelegate내에서 managedObjectContext객체 생성 및 준비과정]

NSManagedObject 관리객체

코어데이터로 저장하고 불러올수 있는 객체


NSManagedObjectContext 관리객체 컨텍스트

관리객체를 담는 그릇. 관리객체 컨텍스트에 관리객체가 포함되어 있음


NSPersistentStoreCoordinator 저장소 관리자

컨텍스트 내용을 파일이나 데이터베이스에 저장하는 객체


NSEntityDescription 엔티티

데이터 베이스의 테이블 구조


NSManagedObjectModel

엔티티를 모아놓은 공간


NSPropertyDescription

엔티티를 이루는 요소. 속성, 관계, 동적인 검색프로퍼티가 있다


NSFetchRequest

관리 객체 컨텍스트에서 객체를 검색할때 조건을 기술한 객체


NSPredicate

검색 요청에서 검색조건을 기술할때 사용


NSFetchedResultsController

테이블뷰가 사용하기 쉽게 검색 결과를 관리하는 도움 클래스 


코어데이터를 이용하는 일반적인 절차


1. 관리객체 컨텍스트 생성

2. 관리객체 컨텍스트에 관리객체를 검색

3. 관리객체 컨텍스트에 객체를 추가, 수정, 삭제

4. 실행 취소, 반복 처리

5. 저장소에 저장




--------------------------------------------------------------------------------------------------

[다른 클래스 내에서 사용과정]


AppDelegate 클래스에서 생성한 managedObjectContext를 다른 클래스에서도 사용하도록 하기 위해

AppDelegate객체에 접근하여 managedObjectContext를 사용하고자 한다.


어플리케이션에서 AppDelegate 클래스는 하나만 존재하기 때문에 싱글톤으로 관리할 변수가 있을 경우 다르게 구현해도 되지만,

AppDelegate에 프로퍼티로 설정하여 가져다 쓰면 된다.

다른 클래스에서 AppDelegate에 접근하고자 하고 싶을 때에는 다음과 같이 접근 가능하다

 [[UIApplication sharedApplication] delegate];


사용하고자 하는 클래스 내에 지정한 managedObjectContext의 객체를 초기화 할때

AppDelegate의 managedObjectContext 객체를 가져와 값으로 넣도록 한다.

 -(NSManagedObjectContext*)managedObjectContext {

if (managedObjectContext == nil) {

TestAppDelegate* delegate = (TestAppDelegate*)[[UIApplication sharedApplication] delegate];

managedObjectContext = [delegate managedObjectContext];

// if

return managedObjectContext;

// managedObjectContext


이제 CoreData를 사용하여 실제적으로 데이터를 가져오고 쓰고, 지우는 과정이다.

 /*read*/


NSError* error;

NSFetchRequest* fetchRequest = [[NSFetchRequest alloc]init];

NSEntityDescription* dataEntity = [NSEntityDescription entityForName:@"CodeData" inManagedObjectContext:self.managedObjectContext];

[fetchRequest setEntity:dataEntity];

NSPredicate* predicate;


CodeData* codeData = nil;


predicate = [NSPredicate predicateWithFormat:@"code_type = %@ AND code_name = %@", codeType, codeName];

[fetchRequest setPredicate:predicate];

NSArray* data_list = [self.managedObjectContext executeFetchRequest:fetchRequest error:&error];

if([data_list count] > 0){

codeData = [data_list objectAtIndex:0];

}

[fetchRequest release];


 /*write*/


NSError* error;

NSFetchRequest* fetchRequest = [[NSFetchRequest alloc]init];

NSEntityDescription* dataEntity = [NSEntityDescription entityForName:@"CodeData"

                                              inManagedObjectContext:self.managedObjectContext];

[fetchRequest setEntity:dataEntity];

NSPredicate* predicate;

CodeData* codeData = (CodeData*)[NSEntityDescription insertNewObjectForEntityForName:@"CodeData" 

                                              inManagedObjectContext:self.managedObjectContext];

codeData.code_type = codeType;

codeData.code_name = [codeDic objectForKey:DATA_VALUE];

codeData.code_desc = [codeDescDic objectForKey:DATA_VALUE];

[self.managedObjectContext insertObject:codeData]; //저장


[self.managedObjectContext save:&error]; //DB 커밋

[fetchRequest release];


 /*delete*/


NSError* error;

NSFetchRequest* fetchRequest = [[NSFetchRequest alloc]init];

NSEntityDescription* dataEntity = [NSEntityDescription entityForName:@"CodeData"

                                              inManagedObjectContext:self.managedObjectContext];

[fetchRequest setEntity:dataEntity];

CodeData* codeData = (CodeData*)[NSEntityDescription insertNewObjectForEntityForName:@"CodeData" 

                                              inManagedObjectContext:self.managedObjectContext];

codeData.code_type = codeType;

codeData.code_name = [codeDic objectForKey:DATA_VALUE];

codeData.code_desc = [codeDescDic objectForKey:DATA_VALUE];


[self.managedObjectContext deleteObject:tempData];//삭제


[self.managedObjectContext save:&error]; //DB 커밋

[fetchRequest release];

[출처] CoreData 사용(수정 중)|작성자 gigar


Posted by 삼스
iOS2012. 10. 29. 18:20


http://www.soft005.com/zbxe/dev_article/2242


Posted by 삼스
iOS2012. 10. 24. 10:47


iOS6에서 shouldAutorotateToInterfaceOrientation가 deprecated되었답니다.

그래서 대안으로 나온게 아래 코드입니다.

shouldAutoRotate와 supportedInterfaceOrientations를 조정하면 된다네요.


아래 코드는 iOS5에서 가로모드만 지원하도록 하는 예이고.

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation {

    return UIInterfaceOrientationIsLandscape(interfaceOrientation);

}


아래 코드는 iOS6에서 가로모드만 지원하는 예입니다.

- (BOOL) shouldAutoRotate{

    return YES;

}


- (NSUInteger)supportedInterfaceOrientations {

    //    UIInterfaceOrientationMaskLandscape;    24

    //    UIInterfaceOrientationMaskLandscapeLeft;    16

    //    UIInterfaceOrientationMaskLandscapeRight;    8

    //    UIInterfaceOrientationMaskPortrait;    2

    return 24;

}



Posted by 삼스
iOS2012. 10. 9. 11:42



http://ddoong2.com/354


Posted by 삼스
iOS2012. 10. 9. 11:32


iPhone5와 iOS6가 나오면서 개발자들은 iPhone5의 더 길어진 스크린을 지원해야 한다. 이에 대해 잘 설명해 놓은 아래 사이트의 글을 정리하여 보았다.

http://redth.info/get-your-monotouch-apps-ready-for-iphone-5-ios-6-today/

새로운 해상도는 640x1136이다. 

1. splah/default screen의 이미지 파일의 네이밍은 Default-568h@2x.png이다. 사이즈는 640x1136 픽셀이어야 한다. 파일을 프로젝트에 추가하고 Build mode를 Content로 맞추어야 한다. 이 파일을 추가하지 않으면 위아래가 44픽셀씩 잘려서 표시되고 추가하는 순간 화면의 기준점이 구석으로 간다.



2. 다른 이미지리소스들은 불행하게도 -568h@2x.png라는 형식을 사용할 수 없다. 뷰에서 커스텀백그라운드 이미지를 사용한다면 해당 해상도에 맞는 이미지를 별도로 작성해야 하고 각 이미지를 사용하는 부분에서 적절히 구분하여 사용해야 한다.

예를 들어 4인치가 아닌 앱에서 다음 두개의 이미지가 있다고 하자.

 ㄱ. Images/TableViewBackground.png - 320x358

 ㄴ. Images/TableViewBackground@2x.png - 640-716

새로운 해상도에서는 3번째 이미지가 필요한데 여기서는 -568h@2x.png 형식을 사용하겠다(물론 애플에서는 싫어하겠지만)

 ㄷ. Images/TableViewBackground-568h@2x.png


3. 이제 iPhone5를 감지하여 새이미지를 사용하도록 코드를 수정해야 한다. 아래 iPhone5인지 감지해주는 샘플코드가 있다. 

  1. public static bool IsTall
  2. {
  3. get
  4. {
  5. return UIDevice.CurrentDevice.UserInterfaceIdiom
  6. == UIUserInterfaceIdiom.Phone
  7. && UIScreen.MainScreen.Bounds.Height
  8. * UIScreen.MainScreen.Scale >= 1136;
  9. }
  10. }

다음 코드는 IsTall을 이용하여 이미지를 단말을 구분하여 Image객체를 리턴해주는 코드 예이다.

  1. static UIImage tableViewBackgroundImage = null;
  2. public static UIImage TableViewBackgroundImage
  3. {
  4. get
  5. {
  6. if (tableViewBackgroundImage == null)
  7. tableViewBackgroundImage = IsTall
  8. ? UIImage.FromFile("Images/TableViewBackground-568h@2x.png")
  9. : UIImage.FromFile("Images/TableViewBackground.png");
  10. return tableViewBackgroundImage;
  11. }
  12. }

이 예제에서 single static instance를 통해서 여러 뷰컨트롤러에서 사용해도 인스턴스는 하나만 유지하도록 하였다.

다른 고려할 사항은 세로길이를 계산하는 로직이 있거나 뷰를 임의크기로 생성할때, 이런식의 코드를 작성해야 한다는 것이다. UIScreen.MainScreen.ApplicationFrame이나 UIScreen.MainScreen.Bounds를 길이나 Y좌표를 계산하는데 고려해야 한다.

다음코드는 좀더 쉽게 이미지를 얻어내는 코드예이다.

  1. private static string tallMagic = "-568h@2x";
  2. public static UIImage FromBundle16x9(string path)
  3. {
  4. //adopt the -568h@2x naming convention
  5. if(IsTall())
  6. {
  7. var imagePath = Path.GetDirectoryName(path.ToString());
  8. var imageFile = Path.GetFileNameWithoutExtension(path.ToString());
  9. var imageExt = Path.GetExtension(path.ToString());
  10. imageFile = imageFile + tallMagic + imageExt;
  11. return UIImage.FromFile(Path.Combine(imagePath,imageFile));
  12. }
  13. else
  14. {
  15. return UIImage.FromBundle(path.ToString());
  16. }
  17. }




Posted by 삼스