About static framework used - ShenYj/ShenYj.github.io GitHub Wiki

About static framework used

ๅ‡†ๅค‡ไธ€ไธช็ฉบ้กน็›ฎใ€ไธคไธชframework ้™ๆ€ๅบ“ๅ’Œ .xcconfig ๆ–‡ไปถ

  • ็›ฎๅฝ•็ป“ๆž„

    .
    โ”œโ”€โ”€ AFNetworking
    โ”‚   โ”œโ”€โ”€ AFAutoPurgingImageCache.h
    โ”‚   โ”œโ”€โ”€ AFCompatibilityMacros.h
    โ”‚   โ”œโ”€โ”€ AFHTTPSessionManager.h
    โ”‚   โ”œโ”€โ”€ AFImageDownloader.h
    โ”‚   โ”œโ”€โ”€ AFNetworkActivityIndicatorManager.h
    โ”‚   โ”œโ”€โ”€ AFNetworkReachabilityManager.h
    โ”‚   โ”œโ”€โ”€ AFNetworking-umbrella.h
    โ”‚   โ”œโ”€โ”€ AFNetworking.h
    โ”‚   โ”œโ”€โ”€ AFSecurityPolicy.h
    โ”‚   โ”œโ”€โ”€ AFURLRequestSerialization.h
    โ”‚   โ”œโ”€โ”€ AFURLResponseSerialization.h
    โ”‚   โ”œโ”€โ”€ AFURLSessionManager.h
    โ”‚   โ”œโ”€โ”€ UIActivityIndicatorView+AFNetworking.h
    โ”‚   โ”œโ”€โ”€ UIButton+AFNetworking.h
    โ”‚   โ”œโ”€โ”€ UIImageView+AFNetworking.h
    โ”‚   โ”œโ”€โ”€ UIKit+AFNetworking.h
    โ”‚   โ”œโ”€โ”€ UIProgressView+AFNetworking.h
    โ”‚   โ”œโ”€โ”€ UIRefreshControl+AFNetworking.h
    โ”‚   โ”œโ”€โ”€ WKWebView+AFNetworking.h
    โ”‚   โ””โ”€โ”€ libAFNetworking.a
    โ”œโ”€โ”€ AFNetworking2
    โ”‚   โ”œโ”€โ”€ AFAutoPurgingImageCache.h
    โ”‚   โ”œโ”€โ”€ AFCompatibilityMacros.h
    โ”‚   โ”œโ”€โ”€ AFHTTPSessionManager.h
    โ”‚   โ”œโ”€โ”€ AFImageDownloader.h
    โ”‚   โ”œโ”€โ”€ AFNetworkActivityIndicatorManager.h
    โ”‚   โ”œโ”€โ”€ AFNetworkReachabilityManager.h
    โ”‚   โ”œโ”€โ”€ AFNetworking-umbrella.h
    โ”‚   โ”œโ”€โ”€ AFNetworking.h
    โ”‚   โ”œโ”€โ”€ AFSecurityPolicy.h
    โ”‚   โ”œโ”€โ”€ AFURLRequestSerialization.h
    โ”‚   โ”œโ”€โ”€ AFURLResponseSerialization.h
    โ”‚   โ”œโ”€โ”€ AFURLSessionManager.h
    โ”‚   โ”œโ”€โ”€ UIActivityIndicatorView+AFNetworking.h
    โ”‚   โ”œโ”€โ”€ UIButton+AFNetworking.h
    โ”‚   โ”œโ”€โ”€ UIImageView+AFNetworking.h
    โ”‚   โ”œโ”€โ”€ UIKit+AFNetworking.h
    โ”‚   โ”œโ”€โ”€ UIProgressView+AFNetworking.h
    โ”‚   โ”œโ”€โ”€ UIRefreshControl+AFNetworking.h
    โ”‚   โ”œโ”€โ”€ WKWebView+AFNetworking.h
    โ”‚   โ””โ”€โ”€ libAFNetworking2.a
    โ”œโ”€โ”€ StaticFrameworkUsed
    โ”‚   โ”œโ”€โ”€ AppDelegate.swift
    โ”‚   โ”œโ”€โ”€ Assets.xcassets
    โ”‚   โ”œโ”€โ”€ Base.lproj
    โ”‚   โ”‚   โ”œโ”€โ”€ LaunchScreen.storyboard
    โ”‚   โ”‚   โ””โ”€โ”€ Main.storyboard
    โ”‚   โ”œโ”€โ”€ Config.xcconfig
    โ”‚   โ”œโ”€โ”€ Info.plist
    โ”‚   โ”œโ”€โ”€ SceneDelegate.swift
    โ”‚   โ””โ”€โ”€ ViewController.swift
    โ””โ”€โ”€ StaticFrameworkUsed.xcodeproj

่ฟ™้‡Œ้ขไธคๅฅ— AFN ็š„ไปฃ็ ๅฎŒๅ…จ็›ธๅŒ๏ผŒๅชๆ˜ฏๆœ€็ปˆ้“พๆŽฅ็”Ÿๆˆ็š„้™ๆ€ๅบ“ๅ็งฐไธๅŒ
้กน็›ฎไธญๆฒกๆœ‰ importๅ’Œไฝฟ็”จ AFN

  • .xcconfig ้…็ฝฎ

    // 1. -I: ๅคดๆ–‡ไปถ
    HEADER_SEARCH_PATHS = $(inherited) "${SRCROOT}/AFNetworking" "${SRCROOT}/AFNetworking2"
    // 2. -L: library ๆ‰€ๅœจ็›ฎๅฝ•
    LIBRARY_SEARCH_PATHS = $(inherited) "${SRCROOT}/AFNetworking" "${SRCROOT}/AFNetworking2"
    // 3. -l ๅ็งฐ
    OTHER_LDFLAGS = $(inherited) -l "AFNetworking" -l "AFNetworking2"

ๆญคๆ—ถ็ผ–่ฏ‘ใ€่ฟ่กŒ้ƒฝๆญฃๅธธ

็”ฑไบŽ้“พๆŽฅไธ€ไธช้™ๆ€ๅบ“ๆ—ถ้ป˜่ฎค้‡‡็”จ็š„ๆ˜ฏ noall_load๏ผŒๆ‰€ไปฅ้“พๆŽฅ็š„ๆ—ถๅ€™ๅทฒ็ปๆ‰พๅˆฐไบ† AFNetworking๏ผŒๅŽ้ขๅ†ๅŽปๆ‰พ AFNetworking2็š„ๆ—ถๅ€™ๅฐฑไผš่ขซๅ‰ฅ็ฆป

  • ๅฐ†ๅ…ถๆ”นๆˆ all_load ๆˆ– -ObjC

    OTHER_LDFLAGS = $(inherited) -all_load -l "AFNetworking" -l "AFNetworking2"
    
  • ๅ†ๆฌก็ผ–่ฏ‘๏ผŒๆ็คบ็ฌฆๅทๅ†ฒ็ช

    
    ...็œ็•ฅ
    
    duplicate symbol '_OBJC_IVAR_$_AFRefreshControlNotificationObserver._refreshControl' in:
        /Users/shenyj/Desktop/StaticFrameworkUsed/AFNetworking/libAFNetworking.a(UIRefreshControl+AFNetworking.o)
        /Users/shenyj/Desktop/StaticFrameworkUsed/AFNetworking2/libAFNetworking2.a(UIRefreshControl+AFNetworking.o)
    ld: 223 duplicate symbols for architecture x86_64
    clang: error: linker command failed with exit code 1 (use -v to see invocation)
    
    

ไฝฟ็”จforce_loadไธŽload_hidden่งฃๅ†ณ็ฌฆๅทๅ†ฒ็ช

  • load_hidden ็š„ไป‹็ป

    -load_hidden path_to_archive
        Uses specified static library as usual, but treats all global symbols from the static library to as if they are
        visibility hidden.  Useful when building a dynamic library that uses a static library but does not want to export
        anything from that static library.

    man ld -> ๆœ็ดขๅ…ณ้”ฎๅญ—ๅณๅฏ

    ๅฐ†้š่—ๆ‰€ๆœ‰็š„ๅ…จๅฑ€็ฌฆๅท๏ผŒ็›ธๅฝ“ไบŽ่ฎพ็ฝฎไธบๆœฌๅœฐ็ฌฆๅท๏ผŒ่ฟ™ๆ ทๅฐ†ๅ…ถ้š่—๏ผŒไนŸๅฐฑไธไผšไบง็”Ÿ็ฌฆๅทๅ†ฒ็ชไบ†

  • ไฝฟ็”จ force_load ไธŽ load_hidden, ไฟฎๆ”น .xcconfig ๅฆ‚ไธ‹

    // 1. -I: ๅคดๆ–‡ไปถ
    HEADER_SEARCH_PATHS = $(inherited) "${SRCROOT}/AFNetworking" "${SRCROOT}/AFNetworking2"
    // 2. -L: library ๆ‰€ๅœจ็›ฎๅฝ•
    LIBRARY_SEARCH_PATHS = $(inherited) "${SRCROOT}/AFNetworking" "${SRCROOT}/AFNetworking2"
    // 3. -l ๅ็งฐ
    //OTHER_LDFLAGS = $(inherited) -all_load -l "AFNetworking" -l "AFNetworking2"
    OTHER_LDFLAGS = $(inherited) -l "AFNetworking" -l "AFNetworking2" -Xlinker -force_load -Xlinker "${SRCROOT}/AFNetworking/libAFNetworking.a" -Xlinker -load_hidden -Xlinker "${SRCROOT}/AFNetworking2/libAFNetworking2.a"
    

่ฟ™ๆ ทไนŸ่ƒฝ่งฃๅ†ณ็ฌฆๅทๅ†ฒ็ช็š„้—ฎ้ข˜

็คบไพ‹้กน็›ฎ ไธ‹่ฝฝ้“พๆŽฅ

โš ๏ธ **GitHub.com Fallback** โš ๏ธ