├── Demo
├── XXNibBridgeDemo
│ ├── Images.xcassets
│ │ ├── doge.imageset
│ │ │ ├── doge@2x.png
│ │ │ └── Contents.json
│ │ ├── sark.imageset
│ │ │ ├── sark@2x.png
│ │ │ └── Contents.json
│ │ ├── AppIcon.appiconset
│ │ │ └── Contents.json
│ │ └── LaunchImage.launchimage
│ │ │ └── Contents.json
│ ├── XXAppDelegate.m
│ ├── XXDogeView.h
│ ├── XXSarkView.h
│ ├── XXConvensionCell.h
│ ├── XXMainViewController.h
│ ├── XXAppDelegate.h
│ ├── XXDogeView.m
│ ├── main.m
│ ├── XXConvensionCell.m
│ ├── XXSarkView.m
│ ├── Info.plist
│ ├── XXMainViewController.m
│ ├── XXConvensionCell.xib
│ ├── XXDogeView.xib
│ ├── Base.lproj
│ │ ├── LaunchScreen.xib
│ │ └── Main.storyboard
│ └── XXSarkView.xib
├── XXNibBridgeDemo.xcodeproj
│ ├── project.xcworkspace
│ │ └── contents.xcworkspacedata
│ ├── xcuserdata
│ │ └── sunnyxx.xcuserdatad
│ │ │ └── xcschemes
│ │ │ ├── xcschememanagement.plist
│ │ │ └── XXNibBridgeDemo.xcscheme
│ └── project.pbxproj
└── XXNibBridgeDemoTests
│ ├── Info.plist
│ └── XXNibBridgeDemoTests.m
├── .gitignore
├── XXNibBridge.xcworkspace
├── xcuserdata
│ └── sunnyxx.xcuserdatad
│ │ ├── WorkspaceSettings.xcsettings
│ │ └── xcdebugger
│ │ └── Breakpoints_v2.xcbkptlist
└── contents.xcworkspacedata
├── LICENSE
├── README.md
├── XXNibBridge.podspec
└── XXNibBridge
├── XXNibBridge.h
├── XXNibConvention.h
├── XXNibConvention.m
└── XXNibBridge.m
/Demo/XXNibBridgeDemo/Images.xcassets/doge.imageset/doge@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sunnyxx/XXNibBridge/HEAD/Demo/XXNibBridgeDemo/Images.xcassets/doge.imageset/doge@2x.png
--------------------------------------------------------------------------------
/Demo/XXNibBridgeDemo/Images.xcassets/sark.imageset/sark@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sunnyxx/XXNibBridge/HEAD/Demo/XXNibBridgeDemo/Images.xcassets/sark.imageset/sark@2x.png
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 |
2 | XXNibBridgeDemo.xcworkspace/xcuserdata/sunnyxx.xcuserdatad/UserInterfaceState.xcuserstate
3 |
4 | XXNibBridge.xcworkspace/xcuserdata/sunnyxx.xcuserdatad/UserInterfaceState.xcuserstate
5 |
6 | *.xcuserstate
7 |
--------------------------------------------------------------------------------
/Demo/XXNibBridgeDemo.xcodeproj/project.xcworkspace/contents.xcworkspacedata:
--------------------------------------------------------------------------------
1 |
2 |
4 |
6 |
7 |
8 |
--------------------------------------------------------------------------------
/Demo/XXNibBridgeDemo/XXAppDelegate.m:
--------------------------------------------------------------------------------
1 | //
2 | // XXAppDelegate.m
3 | // XXNibBridgeDemo
4 | //
5 | // Created by sunnyxx on 14-7-4.
6 | //
7 | //
8 |
9 | #import "XXAppDelegate.h"
10 |
11 | @implementation XXAppDelegate
12 |
13 | @end
14 |
--------------------------------------------------------------------------------
/Demo/XXNibBridgeDemo/XXDogeView.h:
--------------------------------------------------------------------------------
1 | //
2 | // XXDogeView.h
3 | // XXNibBridgeDemo
4 | //
5 | // Created by sunnyxx on 14-7-2.
6 | // Copyright (c) 2014年 sunnyxx. All rights reserved.
7 | //
8 |
9 | #import
10 |
11 | @interface XXDogeView : UIView
12 |
13 | @end
14 |
--------------------------------------------------------------------------------
/Demo/XXNibBridgeDemo/XXSarkView.h:
--------------------------------------------------------------------------------
1 | //
2 | // XXSarkView.h
3 | // XXNibBridgeDemo
4 | //
5 | // Created by sunnyxx on 14-7-2.
6 | // Copyright (c) 2014年 sunnyxx. All rights reserved.
7 | //
8 |
9 | #import
10 |
11 | @interface XXSarkView : UIView
12 |
13 | @end
14 |
--------------------------------------------------------------------------------
/Demo/XXNibBridgeDemo/XXConvensionCell.h:
--------------------------------------------------------------------------------
1 | //
2 | // XXConvensionCell.h
3 | // XXNibBridgeDemo
4 | //
5 | // Created by sunnyxx on 15/9/1.
6 | // Copyright (c) 2015年 sunnyxx. All rights reserved.
7 | //
8 |
9 | #import
10 |
11 | @interface XXConvensionCell : UITableViewCell
12 |
13 | @end
14 |
--------------------------------------------------------------------------------
/Demo/XXNibBridgeDemo/XXMainViewController.h:
--------------------------------------------------------------------------------
1 | //
2 | // XXMainViewController.h
3 | // XXNibBridgeDemo
4 | //
5 | // Created by sunnyxx on 15/9/1.
6 | // Copyright (c) 2015年 sunnyxx. All rights reserved.
7 | //
8 |
9 | #import
10 |
11 | @interface XXMainViewController : UIViewController
12 |
13 | @end
14 |
--------------------------------------------------------------------------------
/Demo/XXNibBridgeDemo/XXAppDelegate.h:
--------------------------------------------------------------------------------
1 | //
2 | // XXAppDelegate.h
3 | // XXNibBridgeDemo
4 | //
5 | // Created by sunnyxx on 14-7-4.
6 | //
7 | //
8 |
9 | #import
10 |
11 | @interface XXAppDelegate : UIResponder
12 |
13 | @property (strong, nonatomic) UIWindow *window;
14 |
15 | @end
16 |
--------------------------------------------------------------------------------
/Demo/XXNibBridgeDemo/XXDogeView.m:
--------------------------------------------------------------------------------
1 | //
2 | // XXDogeView.m
3 | // XXNibBridgeDemo
4 | //
5 | // Created by sunnyxx on 14-7-2.
6 | // Copyright (c) 2014年 sunnyxx. All rights reserved.
7 | //
8 |
9 | #import "XXDogeView.h"
10 | #import "XXNibBridge.h"
11 |
12 | @interface XXDogeView () // Enable nib bridge
13 |
14 | @end
15 |
16 | @implementation XXDogeView
17 |
18 | @end
19 |
--------------------------------------------------------------------------------
/Demo/XXNibBridgeDemo/main.m:
--------------------------------------------------------------------------------
1 | //
2 | // main.m
3 | // XXNibBridgeDemo
4 | //
5 | // Created by sunnyxx on 15/1/8.
6 | // Copyright (c) 2015年 sunnyxx. All rights reserved.
7 | //
8 |
9 | #import
10 | #import "XXAppDelegate.h"
11 |
12 | int main(int argc, char * argv[]) {
13 | @autoreleasepool {
14 | return UIApplicationMain(argc, argv, nil, NSStringFromClass([XXAppDelegate class]));
15 | }
16 | }
17 |
--------------------------------------------------------------------------------
/XXNibBridge.xcworkspace/xcuserdata/sunnyxx.xcuserdatad/WorkspaceSettings.xcsettings:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | HasAskedToTakeAutomaticSnapshotBeforeSignificantChanges
6 |
7 | SnapshotAutomaticallyBeforeSignificantChanges
8 |
9 |
10 |
11 |
--------------------------------------------------------------------------------
/Demo/XXNibBridgeDemo/Images.xcassets/doge.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "scale" : "1x"
6 | },
7 | {
8 | "idiom" : "universal",
9 | "scale" : "2x",
10 | "filename" : "doge@2x.png"
11 | },
12 | {
13 | "idiom" : "universal",
14 | "scale" : "3x"
15 | }
16 | ],
17 | "info" : {
18 | "version" : 1,
19 | "author" : "xcode"
20 | }
21 | }
--------------------------------------------------------------------------------
/Demo/XXNibBridgeDemo/Images.xcassets/sark.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "scale" : "1x"
6 | },
7 | {
8 | "idiom" : "universal",
9 | "scale" : "2x",
10 | "filename" : "sark@2x.png"
11 | },
12 | {
13 | "idiom" : "universal",
14 | "scale" : "3x"
15 | }
16 | ],
17 | "info" : {
18 | "version" : 1,
19 | "author" : "xcode"
20 | }
21 | }
--------------------------------------------------------------------------------
/Demo/XXNibBridgeDemo/XXConvensionCell.m:
--------------------------------------------------------------------------------
1 | //
2 | // XXConvensionCell.m
3 | // XXNibBridgeDemo
4 | //
5 | // Created by sunnyxx on 15/9/1.
6 | // Copyright (c) 2015年 sunnyxx. All rights reserved.
7 | //
8 |
9 | #import "XXConvensionCell.h"
10 |
11 | @implementation XXConvensionCell
12 |
13 | - (void)awakeFromNib {
14 | // Initialization code
15 | }
16 |
17 | - (void)setSelected:(BOOL)selected animated:(BOOL)animated {
18 | [super setSelected:selected animated:animated];
19 |
20 | // Configure the view for the selected state
21 | }
22 |
23 | @end
24 |
--------------------------------------------------------------------------------
/Demo/XXNibBridgeDemo/Images.xcassets/AppIcon.appiconset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "iphone",
5 | "size" : "29x29",
6 | "scale" : "2x"
7 | },
8 | {
9 | "idiom" : "iphone",
10 | "size" : "40x40",
11 | "scale" : "2x"
12 | },
13 | {
14 | "idiom" : "iphone",
15 | "size" : "60x60",
16 | "scale" : "2x"
17 | },
18 | {
19 | "idiom" : "iphone",
20 | "size" : "60x60",
21 | "scale" : "3x"
22 | }
23 | ],
24 | "info" : {
25 | "version" : 1,
26 | "author" : "xcode"
27 | }
28 | }
--------------------------------------------------------------------------------
/Demo/XXNibBridgeDemo/Images.xcassets/LaunchImage.launchimage/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "orientation" : "portrait",
5 | "idiom" : "iphone",
6 | "extent" : "full-screen",
7 | "minimum-system-version" : "7.0",
8 | "scale" : "2x"
9 | },
10 | {
11 | "orientation" : "portrait",
12 | "idiom" : "iphone",
13 | "subtype" : "retina4",
14 | "extent" : "full-screen",
15 | "minimum-system-version" : "7.0",
16 | "scale" : "2x"
17 | }
18 | ],
19 | "info" : {
20 | "version" : 1,
21 | "author" : "xcode"
22 | }
23 | }
--------------------------------------------------------------------------------
/Demo/XXNibBridgeDemo/XXSarkView.m:
--------------------------------------------------------------------------------
1 | //
2 | // XXSarkView.m
3 | // XXNibBridgeDemo
4 | //
5 | // Created by sunnyxx on 14-7-2.
6 | // Copyright (c) 2014年 sunnyxx. All rights reserved.
7 | //
8 |
9 | #import "XXSarkView.h"
10 | #import "XXNibBridge.h"
11 | #import "XXDogeView.h"
12 |
13 | @interface XXSarkView () // Enable nib bridge
14 | @property (nonatomic, weak) IBOutlet XXDogeView *dogeView;
15 | @property (nonatomic, weak) IBOutlet NSLayoutConstraint *heightConstraint;
16 | @end
17 |
18 | @implementation XXSarkView
19 |
20 | - (void)awakeFromNib {
21 | // IBOutlets are fine
22 | self.dogeView.layer.cornerRadius = 5;
23 | self.heightConstraint.constant = 81;
24 | }
25 |
26 | @end
27 |
--------------------------------------------------------------------------------
/Demo/XXNibBridgeDemo.xcodeproj/xcuserdata/sunnyxx.xcuserdatad/xcschemes/xcschememanagement.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | SchemeUserState
6 |
7 | XXNibBridgeDemo.xcscheme
8 |
9 | orderHint
10 | 0
11 |
12 |
13 | SuppressBuildableAutocreation
14 |
15 | 48B78BB21A5E382400B662F7
16 |
17 | primary
18 |
19 |
20 | 48B78BCB1A5E382400B662F7
21 |
22 | primary
23 |
24 |
25 |
26 |
27 |
28 |
--------------------------------------------------------------------------------
/XXNibBridge.xcworkspace/contents.xcworkspacedata:
--------------------------------------------------------------------------------
1 |
2 |
4 |
7 |
9 |
10 |
12 |
13 |
15 |
16 |
18 |
19 |
21 |
22 |
23 |
25 |
26 |
27 |
--------------------------------------------------------------------------------
/Demo/XXNibBridgeDemoTests/Info.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | CFBundleDevelopmentRegion
6 | en
7 | CFBundleExecutable
8 | $(EXECUTABLE_NAME)
9 | CFBundleIdentifier
10 | sunnyxx.$(PRODUCT_NAME:rfc1034identifier)
11 | CFBundleInfoDictionaryVersion
12 | 6.0
13 | CFBundleName
14 | $(PRODUCT_NAME)
15 | CFBundlePackageType
16 | BNDL
17 | CFBundleShortVersionString
18 | 1.0
19 | CFBundleSignature
20 | ????
21 | CFBundleVersion
22 | 1
23 |
24 |
25 |
--------------------------------------------------------------------------------
/Demo/XXNibBridgeDemoTests/XXNibBridgeDemoTests.m:
--------------------------------------------------------------------------------
1 | //
2 | // XXNibBridgeDemoTests.m
3 | // XXNibBridgeDemoTests
4 | //
5 | // Created by sunnyxx on 15/1/8.
6 | // Copyright (c) 2015年 sunnyxx. All rights reserved.
7 | //
8 |
9 | #import
10 | #import
11 |
12 | @interface XXNibBridgeDemoTests : XCTestCase
13 |
14 | @end
15 |
16 | @implementation XXNibBridgeDemoTests
17 |
18 | - (void)setUp {
19 | [super setUp];
20 | // Put setup code here. This method is called before the invocation of each test method in the class.
21 | }
22 |
23 | - (void)tearDown {
24 | // Put teardown code here. This method is called after the invocation of each test method in the class.
25 | [super tearDown];
26 | }
27 |
28 | - (void)testExample {
29 | // This is an example of a functional test case.
30 | XCTAssert(YES, @"Pass");
31 | }
32 |
33 | - (void)testPerformanceExample {
34 | // This is an example of a performance test case.
35 | [self measureBlock:^{
36 | // Put the code you want to measure the time of here.
37 | }];
38 | }
39 |
40 | @end
41 |
--------------------------------------------------------------------------------
/LICENSE:
--------------------------------------------------------------------------------
1 | The MIT License (MIT)
2 |
3 | Copyright (c) 2015 sunnyxx
4 |
5 | Permission is hereby granted, free of charge, to any person obtaining a copy
6 | of this software and associated documentation files (the "Software"), to deal
7 | in the Software without restriction, including without limitation the rights
8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9 | copies of the Software, and to permit persons to whom the Software is
10 | furnished to do so, subject to the following conditions:
11 |
12 | The above copyright notice and this permission notice shall be included in all
13 | copies or substantial portions of the Software.
14 |
15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21 | SOFTWARE.
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | XXNibBridge
2 | ===========
3 |
4 | # Installation
5 |
6 | `pod 'XXNibBridge', '~> 2.3.0'`
7 |
8 | or `pod search XXNibBridge` to check
9 |
10 | # Overview
11 |
12 | `XXNibBridge` bridges `xib` file to storyboards or another xib file
13 |
14 | Design time:
15 |
16 |
17 |
18 | Runtime:
19 |
20 |
21 |
22 | -----
23 |
24 | # How to use
25 |
26 | 1. Build your view class and its xib file. (Same name required)
27 |
28 |
29 |
30 | 2. Put a placeholder view in target IB (xib or storyboard), Set its class.
31 |
32 |
33 |
34 | 3. Conform to `XXNibBridge` and NOTHING to be implemented
35 |
36 | ``` objc
37 | #import
38 | @interface XXDogeView ()
39 | @end
40 | ```
41 |
42 | Done:
43 |
44 |
45 | # How it works
46 |
47 | 中文介绍请见[我的blog](http://blog.sunnyxx.com/2014/07/01/ios_ib_bridge/)
48 |
49 |
50 |
--------------------------------------------------------------------------------
/XXNibBridge.podspec:
--------------------------------------------------------------------------------
1 |
2 | Pod::Spec.new do |s|
3 | s.name = "XXNibBridge"
4 | s.version = "2.3.1"
5 | s.summary = "XXNibBridge"
6 | s.description = "Bridge a nib file to another nib or storyboard"
7 | s.homepage = "https://github.com/sunnyxx/XXNibBridge"
8 | s.screenshots = "https://camo.githubusercontent.com/79e8b3019e36b99f796966f8df118e18576ff781/687474703a2f2f7777322e73696e61696d672e636e2f6c617267652f353135333035383367773165687a676b6c696b34326a32306d3830676f3075612e6a7067"
9 |
10 | # ――― Spec License ――――――――――――――――――――――――――――――――――――――――――――――――――――――――――― #
11 | s.license = { :type => "MIT", :file => "LICENSE" }
12 |
13 | # ――― Author Metadata ――――――――――――――――――――――――――――――――――――――――――――――――――――――――― #
14 | s.author = { "sunnyxx" => "sunyuan1713@gmail.com" }
15 | # ――― Platform Specifics ――――――――――――――――――――――――――――――――――――――――――――――――――――――― #
16 | s.platform = :ios, "6.0"
17 | # ――― Source Location ―――――――――――――――――――――――――――――――――――――――――――――――――――――――――― #
18 | s.source = { :git => "https://github.com/sunnyxx/XXNibBridge.git", :tag => "2.3.1" }
19 | # ――― Source Code ―――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――― #
20 | s.source_files = "XXNibBridge/*.{h,m}"
21 | # ――― Project Settings ――――――――――――――――――――――――――――――――――――――――――――――――――――――――― #
22 | s.requires_arc = true
23 | end
24 |
--------------------------------------------------------------------------------
/Demo/XXNibBridgeDemo/Info.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | CFBundleDevelopmentRegion
6 | en
7 | CFBundleExecutable
8 | $(EXECUTABLE_NAME)
9 | CFBundleIdentifier
10 | sunnyxx.$(PRODUCT_NAME:rfc1034identifier)
11 | CFBundleInfoDictionaryVersion
12 | 6.0
13 | CFBundleName
14 | $(PRODUCT_NAME)
15 | CFBundlePackageType
16 | APPL
17 | CFBundleShortVersionString
18 | 1.0
19 | CFBundleSignature
20 | ????
21 | CFBundleVersion
22 | 1
23 | LSRequiresIPhoneOS
24 |
25 | UILaunchStoryboardName
26 | LaunchScreen
27 | UIMainStoryboardFile
28 | Main
29 | UIRequiredDeviceCapabilities
30 |
31 | armv7
32 |
33 | UISupportedInterfaceOrientations
34 |
35 | UIInterfaceOrientationPortrait
36 | UIInterfaceOrientationLandscapeLeft
37 | UIInterfaceOrientationLandscapeRight
38 |
39 |
40 |
41 |
--------------------------------------------------------------------------------
/Demo/XXNibBridgeDemo/XXMainViewController.m:
--------------------------------------------------------------------------------
1 | //
2 | // XXMainViewController.m
3 | // XXNibBridgeDemo
4 | //
5 | // Created by sunnyxx on 15/9/1.
6 | // Copyright (c) 2015年 sunnyxx. All rights reserved.
7 | //
8 |
9 | #import "XXMainViewController.h"
10 | #import "XXNibConvention.h"
11 | #import "XXConvensionCell.h"
12 |
13 | @interface XXMainViewController ()
14 | @property (nonatomic, weak) IBOutlet UITableView *tableView;
15 | @end
16 |
17 | @implementation XXMainViewController
18 |
19 | - (void)viewDidLoad {
20 | [super viewDidLoad];
21 |
22 | // Use convention for cell reuse identifier.
23 | [self.tableView registerNib:[XXConvensionCell nib] forCellReuseIdentifier:[XXConvensionCell nibid]];
24 | }
25 |
26 | #pragma mark - UITableViewDataSource
27 |
28 | - (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {
29 | return 1;
30 | }
31 |
32 | - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
33 | return 1;
34 | }
35 |
36 | - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
37 | return [tableView dequeueReusableCellWithIdentifier:[XXConvensionCell nibid]];
38 | }
39 |
40 | #pragma mark - UITableViewDelegate
41 |
42 | - (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
43 | [tableView deselectRowAtIndexPath:indexPath animated:YES];
44 | [self performSegueWithIdentifier:@"DetailSegue" sender:nil];
45 | }
46 |
47 | @end
48 |
--------------------------------------------------------------------------------
/XXNibBridge/XXNibBridge.h:
--------------------------------------------------------------------------------
1 | // XXNibBridge.h
2 | // Version 2.2
3 | //
4 | // Copyright (c) 2015 sunnyxx ( http://github.com/sunnyxx )
5 | //
6 | // Permission is hereby granted, free of charge, to any person obtaining a copy
7 | // of this software and associated documentation files (the "Software"), to deal
8 | // in the Software without restriction, including without limitation the rights
9 | // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
10 | // copies of the Software, and to permit persons to whom the Software is
11 | // furnished to do so, subject to the following conditions:
12 | //
13 | // The above copyright notice and this permission notice shall be included in
14 | // all copies or substantial portions of the Software.
15 | //
16 | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
17 | // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
18 | // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
19 | // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
20 | // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
21 | // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
22 | // THE SOFTWARE.
23 |
24 | #import "XXNibConvention.h"
25 |
26 | /// Any subclass of UIView that conforms to this protocol is considered accept nib bridge.
27 | /// Usage:
28 | ///
29 | /// @interface FooView ()
30 | /// @end
31 | ///
32 | @protocol XXNibBridge
33 | @end
--------------------------------------------------------------------------------
/Demo/XXNibBridgeDemo/XXConvensionCell.xib:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
23 |
24 |
25 |
26 |
27 |
28 |
--------------------------------------------------------------------------------
/XXNibBridge/XXNibConvention.h:
--------------------------------------------------------------------------------
1 | // XXNibConvention.h
2 | // Version 2.2
3 | //
4 | // Copyright (c) 2015 sunnyxx ( http://github.com/sunnyxx )
5 | //
6 | // Permission is hereby granted, free of charge, to any person obtaining a copy
7 | // of this software and associated documentation files (the "Software"), to deal
8 | // in the Software without restriction, including without limitation the rights
9 | // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
10 | // copies of the Software, and to permit persons to whom the Software is
11 | // furnished to do so, subject to the following conditions:
12 | //
13 | // The above copyright notice and this permission notice shall be included in
14 | // all copies or substantial portions of the Software.
15 | //
16 | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
17 | // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
18 | // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
19 | // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
20 | // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
21 | // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
22 | // THE SOFTWARE.
23 |
24 | #import
25 |
26 | @protocol XXNibConvention
27 |
28 | /// Class name by convention.
29 | + (NSString *)nibid;
30 |
31 | /// Nib file in main bundle with class name by convention.
32 | + (UINib *)nib;
33 |
34 | @end
35 |
36 | @protocol XXDeprecatedNibConvention
37 |
38 | /// See `+ nibid`, I don't like this selector.
39 | + (NSString *)xx_nibID;
40 |
41 | /// See `+ nib`, I don't like this selector.
42 | + (UINib *)xx_nib;
43 |
44 | @end
45 |
46 | @interface UIView (XXNibConvention)
47 |
48 | /// Instantiate from `+ nib` with no owner, no options.
49 | ///
50 | /// Required:
51 | /// FooView.h, FooView.m, FooView.xib
52 | /// Usage:
53 | /// FooView *view = [FooView xx_instantiateFromNib];
54 | ///
55 | + (id)xx_instantiateFromNib;
56 |
57 | /// See `+ xx_instantiateFromNib` but with bundle and owner.
58 | + (id)xx_instantiateFromNibInBundle:(NSBundle *)bundle owner:(id)owner;
59 |
60 | @end
61 |
62 | @interface UIViewController (XXNibConvention)
63 |
64 | /// Instantiate from given storyboard which class name as its `storyboard identifier`
65 | + (id)xx_instantiateFromStoryboardNamed:(NSString *)name;
66 |
67 | @end
68 |
--------------------------------------------------------------------------------
/XXNibBridge.xcworkspace/xcuserdata/sunnyxx.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist:
--------------------------------------------------------------------------------
1 |
2 |
5 |
6 |
8 |
14 |
15 |
16 |
18 |
24 |
25 |
33 |
34 |
35 |
36 |
37 |
39 |
45 |
46 |
54 |
55 |
56 |
57 |
58 |
60 |
72 |
73 |
74 |
75 |
76 |
--------------------------------------------------------------------------------
/Demo/XXNibBridgeDemo/XXDogeView.xib:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
35 |
36 |
37 |
38 |
39 |
40 |
41 |
42 |
43 |
44 |
45 |
46 |
--------------------------------------------------------------------------------
/XXNibBridge/XXNibConvention.m:
--------------------------------------------------------------------------------
1 | // XXNibConvention.m
2 | // Version 2.2
3 | //
4 | // Copyright (c) 2015 sunnyxx ( http://github.com/sunnyxx )
5 | //
6 | // Permission is hereby granted, free of charge, to any person obtaining a copy
7 | // of this software and associated documentation files (the "Software"), to deal
8 | // in the Software without restriction, including without limitation the rights
9 | // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
10 | // copies of the Software, and to permit persons to whom the Software is
11 | // furnished to do so, subject to the following conditions:
12 | //
13 | // The above copyright notice and this permission notice shall be included in
14 | // all copies or substantial portions of the Software.
15 | //
16 | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
17 | // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
18 | // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
19 | // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
20 | // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
21 | // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
22 | // THE SOFTWARE.
23 |
24 | #import "XXNibConvention.h"
25 |
26 | @implementation UIView (XXNibConvention)
27 |
28 | #pragma mark - XXNibConvention
29 |
30 | + (NSString *)nibid {
31 | NSString *className = NSStringFromClass(self);
32 | if ([className rangeOfString:@"."].location != NSNotFound) {
33 | // Swift class name contains module name
34 | return [className componentsSeparatedByString:@"."].lastObject;
35 | }
36 | return className;
37 | }
38 |
39 | + (UINib *)nib {
40 | return [UINib nibWithNibName:self.nibid bundle:nil];
41 | }
42 |
43 | #pragma mark - XXDeprecatedNibConvention
44 |
45 | + (NSString *)xx_nibID {
46 | return self.nibid;
47 | }
48 |
49 | + (UINib *)xx_nib {
50 | return self.nib;
51 | }
52 |
53 | #pragma mark - Public
54 |
55 | + (id)xx_instantiateFromNib {
56 | return [self xx_instantiateFromNibInBundle:nil owner:nil];
57 | }
58 |
59 | + (id)xx_instantiateFromNibInBundle:(NSBundle *)bundle owner:(id)owner {
60 | NSArray *views = [self.xx_nib instantiateWithOwner:owner options:nil];
61 | for (UIView *view in views) {
62 | if ([view isMemberOfClass:self.class]) {
63 | return view;
64 | }
65 | }
66 | NSAssert(NO, @"Expect file: %@", [NSString stringWithFormat:@"%@.xib", self.nibid]);
67 | return nil;
68 | }
69 |
70 | @end
71 |
72 | @implementation UIViewController (XXNibConvention)
73 |
74 | #pragma mark - XXNibConvention
75 |
76 | + (NSString *)nibid {
77 | return NSStringFromClass(self);
78 | }
79 |
80 | + (UINib *)nib {
81 | return [UINib nibWithNibName:self.nibid bundle:nil];
82 | }
83 |
84 | #pragma mark - XXDeprecatedNibConvention
85 |
86 | + (NSString *)xx_nibID {
87 | return self.nibid;
88 | }
89 |
90 | + (UINib *)xx_nib {
91 | return self.nib;
92 | }
93 |
94 | #pragma mark - Public
95 |
96 | + (id)xx_instantiateFromStoryboardNamed:(NSString *)name {
97 | NSParameterAssert(name.length > 0);
98 | UIStoryboard *storyboard = [UIStoryboard storyboardWithName:name bundle:nil];
99 | NSAssert(storyboard != nil, @"Expect file: %@", [NSString stringWithFormat:@"%@.storyboard", name]);
100 | return [storyboard instantiateViewControllerWithIdentifier:self.nibid];
101 | }
102 |
103 | @end
104 |
--------------------------------------------------------------------------------
/Demo/XXNibBridgeDemo/Base.lproj/LaunchScreen.xib:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
20 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
35 |
36 |
37 |
38 |
39 |
40 |
41 |
42 |
--------------------------------------------------------------------------------
/Demo/XXNibBridgeDemo.xcodeproj/xcuserdata/sunnyxx.xcuserdatad/xcschemes/XXNibBridgeDemo.xcscheme:
--------------------------------------------------------------------------------
1 |
2 |
5 |
8 |
9 |
15 |
21 |
22 |
23 |
29 |
35 |
36 |
37 |
38 |
39 |
44 |
45 |
47 |
53 |
54 |
55 |
56 |
57 |
63 |
64 |
65 |
66 |
75 |
77 |
83 |
84 |
85 |
86 |
87 |
88 |
94 |
96 |
102 |
103 |
104 |
105 |
107 |
108 |
111 |
112 |
113 |
--------------------------------------------------------------------------------
/Demo/XXNibBridgeDemo/XXSarkView.xib:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
20 |
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 |
52 |
53 |
54 |
55 |
56 |
57 |
58 |
59 |
60 |
61 |
62 |
63 |
64 |
65 |
66 |
67 |
68 |
69 |
70 |
--------------------------------------------------------------------------------
/XXNibBridge/XXNibBridge.m:
--------------------------------------------------------------------------------
1 | // XXNibBridge.m
2 | // Version 2.2
3 | //
4 | // Copyright (c) 2015 sunnyxx ( http://github.com/sunnyxx )
5 | //
6 | // Permission is hereby granted, free of charge, to any person obtaining a copy
7 | // of this software and associated documentation files (the "Software"), to deal
8 | // in the Software without restriction, including without limitation the rights
9 | // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
10 | // copies of the Software, and to permit persons to whom the Software is
11 | // furnished to do so, subject to the following conditions:
12 | //
13 | // The above copyright notice and this permission notice shall be included in
14 | // all copies or substantial portions of the Software.
15 | //
16 | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
17 | // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
18 | // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
19 | // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
20 | // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
21 | // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
22 | // THE SOFTWARE.
23 |
24 | #import "XXNibBridge.h"
25 | #import
26 |
27 | @interface XXNibBridgeImplementation : NSObject
28 | /// `NS_REPLACES_RECEIVER` attribute is a must for right ownership for `self` under ARC.
29 | - (id)hackedAwakeAfterUsingCoder:(NSCoder *)decoder NS_REPLACES_RECEIVER;
30 | @end
31 |
32 | @implementation XXNibBridgeImplementation
33 |
34 | + (void)load {
35 | static dispatch_once_t onceToken;
36 | dispatch_once(&onceToken, ^{
37 | SEL originalSelector = @selector(awakeAfterUsingCoder:);
38 | SEL swizzledSelector = @selector(hackedAwakeAfterUsingCoder:);
39 | Method originalMethod = class_getInstanceMethod(UIView.class, originalSelector);
40 | Method swizzledMethod = class_getInstanceMethod(self, swizzledSelector);
41 | if (class_addMethod(UIView.class, originalSelector, method_getImplementation(swizzledMethod), method_getTypeEncoding(swizzledMethod))) {
42 | class_replaceMethod(UIView.class, swizzledSelector, method_getImplementation(originalMethod), method_getTypeEncoding(originalMethod));
43 | } else {
44 | method_exchangeImplementations(originalMethod, swizzledMethod);
45 | }
46 | });
47 | }
48 |
49 | - (id)hackedAwakeAfterUsingCoder:(NSCoder *)decoder {
50 | if ([self.class conformsToProtocol:@protocol(XXNibBridge)] && ((UIView *)self).subviews.count == 0) {
51 | // "self" is placeholder view for this moment, replace it.
52 | return [XXNibBridgeImplementation instantiateRealViewFromPlaceholder:(UIView *)self];
53 | }
54 | return self;
55 | }
56 |
57 | + (UIView *)instantiateRealViewFromPlaceholder:(UIView *)placeholderView {
58 |
59 | // Required to conform `XXNibConvension`.
60 | UIView *realView = [[placeholderView class] xx_instantiateFromNib];
61 |
62 | realView.tag = placeholderView.tag;
63 | realView.frame = placeholderView.frame;
64 | realView.bounds = placeholderView.bounds;
65 | realView.hidden = placeholderView.hidden;
66 | realView.clipsToBounds = placeholderView.clipsToBounds;
67 | realView.autoresizingMask = placeholderView.autoresizingMask;
68 | realView.userInteractionEnabled = placeholderView.userInteractionEnabled;
69 | realView.translatesAutoresizingMaskIntoConstraints = placeholderView.translatesAutoresizingMaskIntoConstraints;
70 |
71 | // Copy autolayout constrains.
72 | if (placeholderView.constraints.count > 0) {
73 |
74 | // We only need to copy "self" constraints (like width/height constraints)
75 | // from placeholder to real view
76 | for (NSLayoutConstraint *constraint in placeholderView.constraints) {
77 |
78 | NSLayoutConstraint* newConstraint;
79 |
80 | // "Height" or "Width" constraint
81 | // "self" as its first item, no second item
82 | if (!constraint.secondItem) {
83 | newConstraint =
84 | [NSLayoutConstraint constraintWithItem:realView
85 | attribute:constraint.firstAttribute
86 | relatedBy:constraint.relation
87 | toItem:nil
88 | attribute:constraint.secondAttribute
89 | multiplier:constraint.multiplier
90 | constant:constraint.constant];
91 | }
92 | // "Aspect ratio" constraint
93 | // "self" as its first AND second item
94 | else if ([constraint.firstItem isEqual:constraint.secondItem]) {
95 | newConstraint =
96 | [NSLayoutConstraint constraintWithItem:realView
97 | attribute:constraint.firstAttribute
98 | relatedBy:constraint.relation
99 | toItem:realView
100 | attribute:constraint.secondAttribute
101 | multiplier:constraint.multiplier
102 | constant:constraint.constant];
103 | }
104 |
105 | // Copy properties to new constraint
106 | if (newConstraint) {
107 | newConstraint.shouldBeArchived = constraint.shouldBeArchived;
108 | newConstraint.priority = constraint.priority;
109 | if ([UIDevice currentDevice].systemVersion.floatValue >= 7.0f) {
110 | newConstraint.identifier = constraint.identifier;
111 | }
112 | [realView addConstraint:newConstraint];
113 | }
114 | }
115 | }
116 |
117 | return realView;
118 | }
119 |
120 | @end
121 |
--------------------------------------------------------------------------------
/Demo/XXNibBridgeDemo/Base.lproj/Main.storyboard:
--------------------------------------------------------------------------------
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 |
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 |
52 |
53 |
54 |
55 |
56 |
57 |
58 |
59 |
65 |
66 |
67 |
68 |
69 |
70 |
71 |
72 |
73 |
74 |
75 |
76 |
82 |
83 |
84 |
85 |
86 |
87 |
88 |
89 |
90 |
91 |
92 |
93 |
94 |
95 |
96 |
97 |
98 |
99 |
100 |
101 |
102 |
103 |
104 |
105 |
106 |
107 |
108 |
109 |
110 |
111 |
112 |
113 |
114 |
115 |
116 |
117 |
118 |
119 |
120 |
121 |
122 |
123 |
124 |
125 |
126 |
127 |
128 |
129 |
130 |
131 |
132 |
133 |
134 |
--------------------------------------------------------------------------------
/Demo/XXNibBridgeDemo.xcodeproj/project.pbxproj:
--------------------------------------------------------------------------------
1 | // !$*UTF8*$!
2 | {
3 | archiveVersion = 1;
4 | classes = {
5 | };
6 | objectVersion = 46;
7 | objects = {
8 |
9 | /* Begin PBXBuildFile section */
10 | 488DAAFD1B95BA2A00680E56 /* XXConvensionCell.m in Sources */ = {isa = PBXBuildFile; fileRef = 488DAAFB1B95BA2A00680E56 /* XXConvensionCell.m */; };
11 | 488DAAFE1B95BA2A00680E56 /* XXConvensionCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = 488DAAFC1B95BA2A00680E56 /* XXConvensionCell.xib */; };
12 | 488DAB011B95BA4400680E56 /* XXMainViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 488DAB001B95BA4400680E56 /* XXMainViewController.m */; };
13 | 48ADAFEE1A5FD274008F2ED8 /* XXNibConvention.m in Sources */ = {isa = PBXBuildFile; fileRef = 48ADAFED1A5FD274008F2ED8 /* XXNibConvention.m */; };
14 | 48B78BB91A5E382400B662F7 /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = 48B78BB81A5E382400B662F7 /* main.m */; };
15 | 48B78BC21A5E382400B662F7 /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 48B78BC01A5E382400B662F7 /* Main.storyboard */; };
16 | 48B78BC41A5E382400B662F7 /* Images.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 48B78BC31A5E382400B662F7 /* Images.xcassets */; };
17 | 48B78BC71A5E382400B662F7 /* LaunchScreen.xib in Resources */ = {isa = PBXBuildFile; fileRef = 48B78BC51A5E382400B662F7 /* LaunchScreen.xib */; };
18 | 48B78BD31A5E382400B662F7 /* XXNibBridgeDemoTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 48B78BD21A5E382400B662F7 /* XXNibBridgeDemoTests.m */; };
19 | 48B78BDF1A5E38AF00B662F7 /* XXNibBridge.m in Sources */ = {isa = PBXBuildFile; fileRef = 48B78BDE1A5E38AF00B662F7 /* XXNibBridge.m */; };
20 | 48B78BE81A5E6B2700B662F7 /* XXAppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = 48B78BE11A5E6B2700B662F7 /* XXAppDelegate.m */; };
21 | 48B78BE91A5E6B2700B662F7 /* XXDogeView.m in Sources */ = {isa = PBXBuildFile; fileRef = 48B78BE31A5E6B2700B662F7 /* XXDogeView.m */; };
22 | 48B78BEA1A5E6B2700B662F7 /* XXDogeView.xib in Resources */ = {isa = PBXBuildFile; fileRef = 48B78BE41A5E6B2700B662F7 /* XXDogeView.xib */; };
23 | 48B78BEB1A5E6B2700B662F7 /* XXSarkView.m in Sources */ = {isa = PBXBuildFile; fileRef = 48B78BE61A5E6B2700B662F7 /* XXSarkView.m */; };
24 | 48B78BEC1A5E6B2700B662F7 /* XXSarkView.xib in Resources */ = {isa = PBXBuildFile; fileRef = 48B78BE71A5E6B2700B662F7 /* XXSarkView.xib */; };
25 | /* End PBXBuildFile section */
26 |
27 | /* Begin PBXContainerItemProxy section */
28 | 48B78BCD1A5E382400B662F7 /* PBXContainerItemProxy */ = {
29 | isa = PBXContainerItemProxy;
30 | containerPortal = 48B78BAB1A5E382400B662F7 /* Project object */;
31 | proxyType = 1;
32 | remoteGlobalIDString = 48B78BB21A5E382400B662F7;
33 | remoteInfo = XXNibBridgeDemo;
34 | };
35 | /* End PBXContainerItemProxy section */
36 |
37 | /* Begin PBXFileReference section */
38 | 488DAAFA1B95BA2A00680E56 /* XXConvensionCell.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = XXConvensionCell.h; sourceTree = ""; };
39 | 488DAAFB1B95BA2A00680E56 /* XXConvensionCell.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = XXConvensionCell.m; sourceTree = ""; };
40 | 488DAAFC1B95BA2A00680E56 /* XXConvensionCell.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = XXConvensionCell.xib; sourceTree = ""; };
41 | 488DAAFF1B95BA4400680E56 /* XXMainViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = XXMainViewController.h; sourceTree = ""; };
42 | 488DAB001B95BA4400680E56 /* XXMainViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = XXMainViewController.m; sourceTree = ""; };
43 | 48ADAFEC1A5FD274008F2ED8 /* XXNibConvention.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = XXNibConvention.h; sourceTree = ""; };
44 | 48ADAFED1A5FD274008F2ED8 /* XXNibConvention.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = XXNibConvention.m; sourceTree = ""; };
45 | 48B78BB31A5E382400B662F7 /* XXNibBridgeDemo.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = XXNibBridgeDemo.app; sourceTree = BUILT_PRODUCTS_DIR; };
46 | 48B78BB71A5E382400B662F7 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; };
47 | 48B78BB81A5E382400B662F7 /* main.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = main.m; sourceTree = ""; };
48 | 48B78BC11A5E382400B662F7 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = ""; };
49 | 48B78BC31A5E382400B662F7 /* Images.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Images.xcassets; sourceTree = ""; };
50 | 48B78BC61A5E382400B662F7 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = Base; path = Base.lproj/LaunchScreen.xib; sourceTree = ""; };
51 | 48B78BCC1A5E382400B662F7 /* XXNibBridgeDemoTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = XXNibBridgeDemoTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; };
52 | 48B78BD11A5E382400B662F7 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; };
53 | 48B78BD21A5E382400B662F7 /* XXNibBridgeDemoTests.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = XXNibBridgeDemoTests.m; sourceTree = ""; };
54 | 48B78BDD1A5E38AF00B662F7 /* XXNibBridge.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = XXNibBridge.h; sourceTree = ""; };
55 | 48B78BDE1A5E38AF00B662F7 /* XXNibBridge.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = XXNibBridge.m; sourceTree = ""; };
56 | 48B78BE01A5E6B2700B662F7 /* XXAppDelegate.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = XXAppDelegate.h; sourceTree = ""; };
57 | 48B78BE11A5E6B2700B662F7 /* XXAppDelegate.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = XXAppDelegate.m; sourceTree = ""; };
58 | 48B78BE21A5E6B2700B662F7 /* XXDogeView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = XXDogeView.h; sourceTree = ""; };
59 | 48B78BE31A5E6B2700B662F7 /* XXDogeView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = XXDogeView.m; sourceTree = ""; };
60 | 48B78BE41A5E6B2700B662F7 /* XXDogeView.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = XXDogeView.xib; sourceTree = ""; };
61 | 48B78BE51A5E6B2700B662F7 /* XXSarkView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = XXSarkView.h; sourceTree = ""; };
62 | 48B78BE61A5E6B2700B662F7 /* XXSarkView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = XXSarkView.m; sourceTree = ""; };
63 | 48B78BE71A5E6B2700B662F7 /* XXSarkView.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = XXSarkView.xib; sourceTree = ""; };
64 | /* End PBXFileReference section */
65 |
66 | /* Begin PBXFrameworksBuildPhase section */
67 | 48B78BB01A5E382400B662F7 /* Frameworks */ = {
68 | isa = PBXFrameworksBuildPhase;
69 | buildActionMask = 2147483647;
70 | files = (
71 | );
72 | runOnlyForDeploymentPostprocessing = 0;
73 | };
74 | 48B78BC91A5E382400B662F7 /* Frameworks */ = {
75 | isa = PBXFrameworksBuildPhase;
76 | buildActionMask = 2147483647;
77 | files = (
78 | );
79 | runOnlyForDeploymentPostprocessing = 0;
80 | };
81 | /* End PBXFrameworksBuildPhase section */
82 |
83 | /* Begin PBXGroup section */
84 | 488DAAF91B95B9F900680E56 /* Nib Convention */ = {
85 | isa = PBXGroup;
86 | children = (
87 | 488DAAFA1B95BA2A00680E56 /* XXConvensionCell.h */,
88 | 488DAAFB1B95BA2A00680E56 /* XXConvensionCell.m */,
89 | 488DAAFC1B95BA2A00680E56 /* XXConvensionCell.xib */,
90 | );
91 | name = "Nib Convention";
92 | sourceTree = "";
93 | };
94 | 48B78BAA1A5E382400B662F7 = {
95 | isa = PBXGroup;
96 | children = (
97 | 48B78BB51A5E382400B662F7 /* XXNibBridgeDemo */,
98 | 48B78BCF1A5E382400B662F7 /* XXNibBridgeDemoTests */,
99 | 48B78BB41A5E382400B662F7 /* Products */,
100 | );
101 | sourceTree = "";
102 | };
103 | 48B78BB41A5E382400B662F7 /* Products */ = {
104 | isa = PBXGroup;
105 | children = (
106 | 48B78BB31A5E382400B662F7 /* XXNibBridgeDemo.app */,
107 | 48B78BCC1A5E382400B662F7 /* XXNibBridgeDemoTests.xctest */,
108 | );
109 | name = Products;
110 | sourceTree = "";
111 | };
112 | 48B78BB51A5E382400B662F7 /* XXNibBridgeDemo */ = {
113 | isa = PBXGroup;
114 | children = (
115 | 48B78BE01A5E6B2700B662F7 /* XXAppDelegate.h */,
116 | 48B78BE11A5E6B2700B662F7 /* XXAppDelegate.m */,
117 | 488DAAFF1B95BA4400680E56 /* XXMainViewController.h */,
118 | 488DAB001B95BA4400680E56 /* XXMainViewController.m */,
119 | 48B78BC01A5E382400B662F7 /* Main.storyboard */,
120 | 48B78BC31A5E382400B662F7 /* Images.xcassets */,
121 | 48B78BC51A5E382400B662F7 /* LaunchScreen.xib */,
122 | 488DAAF91B95B9F900680E56 /* Nib Convention */,
123 | 48FAE4871A67AE3E003F1D6B /* Bridge Views */,
124 | 48B78BDC1A5E38AF00B662F7 /* XXNibBridge Classes */,
125 | 48B78BB61A5E382400B662F7 /* Supporting Files */,
126 | );
127 | path = XXNibBridgeDemo;
128 | sourceTree = "";
129 | };
130 | 48B78BB61A5E382400B662F7 /* Supporting Files */ = {
131 | isa = PBXGroup;
132 | children = (
133 | 48B78BB71A5E382400B662F7 /* Info.plist */,
134 | 48B78BB81A5E382400B662F7 /* main.m */,
135 | );
136 | name = "Supporting Files";
137 | sourceTree = "";
138 | };
139 | 48B78BCF1A5E382400B662F7 /* XXNibBridgeDemoTests */ = {
140 | isa = PBXGroup;
141 | children = (
142 | 48B78BD21A5E382400B662F7 /* XXNibBridgeDemoTests.m */,
143 | 48B78BD01A5E382400B662F7 /* Supporting Files */,
144 | );
145 | path = XXNibBridgeDemoTests;
146 | sourceTree = "";
147 | };
148 | 48B78BD01A5E382400B662F7 /* Supporting Files */ = {
149 | isa = PBXGroup;
150 | children = (
151 | 48B78BD11A5E382400B662F7 /* Info.plist */,
152 | );
153 | name = "Supporting Files";
154 | sourceTree = "";
155 | };
156 | 48B78BDC1A5E38AF00B662F7 /* XXNibBridge Classes */ = {
157 | isa = PBXGroup;
158 | children = (
159 | 48B78BDD1A5E38AF00B662F7 /* XXNibBridge.h */,
160 | 48B78BDE1A5E38AF00B662F7 /* XXNibBridge.m */,
161 | 48ADAFEC1A5FD274008F2ED8 /* XXNibConvention.h */,
162 | 48ADAFED1A5FD274008F2ED8 /* XXNibConvention.m */,
163 | );
164 | name = "XXNibBridge Classes";
165 | path = ../../XXNibBridge;
166 | sourceTree = "";
167 | };
168 | 48FAE4871A67AE3E003F1D6B /* Bridge Views */ = {
169 | isa = PBXGroup;
170 | children = (
171 | 48B78BE21A5E6B2700B662F7 /* XXDogeView.h */,
172 | 48B78BE31A5E6B2700B662F7 /* XXDogeView.m */,
173 | 48B78BE41A5E6B2700B662F7 /* XXDogeView.xib */,
174 | 48B78BE51A5E6B2700B662F7 /* XXSarkView.h */,
175 | 48B78BE61A5E6B2700B662F7 /* XXSarkView.m */,
176 | 48B78BE71A5E6B2700B662F7 /* XXSarkView.xib */,
177 | );
178 | name = "Bridge Views";
179 | sourceTree = "";
180 | };
181 | /* End PBXGroup section */
182 |
183 | /* Begin PBXNativeTarget section */
184 | 48B78BB21A5E382400B662F7 /* XXNibBridgeDemo */ = {
185 | isa = PBXNativeTarget;
186 | buildConfigurationList = 48B78BD61A5E382400B662F7 /* Build configuration list for PBXNativeTarget "XXNibBridgeDemo" */;
187 | buildPhases = (
188 | 48B78BAF1A5E382400B662F7 /* Sources */,
189 | 48B78BB01A5E382400B662F7 /* Frameworks */,
190 | 48B78BB11A5E382400B662F7 /* Resources */,
191 | );
192 | buildRules = (
193 | );
194 | dependencies = (
195 | );
196 | name = XXNibBridgeDemo;
197 | productName = XXNibBridgeDemo;
198 | productReference = 48B78BB31A5E382400B662F7 /* XXNibBridgeDemo.app */;
199 | productType = "com.apple.product-type.application";
200 | };
201 | 48B78BCB1A5E382400B662F7 /* XXNibBridgeDemoTests */ = {
202 | isa = PBXNativeTarget;
203 | buildConfigurationList = 48B78BD91A5E382400B662F7 /* Build configuration list for PBXNativeTarget "XXNibBridgeDemoTests" */;
204 | buildPhases = (
205 | 48B78BC81A5E382400B662F7 /* Sources */,
206 | 48B78BC91A5E382400B662F7 /* Frameworks */,
207 | 48B78BCA1A5E382400B662F7 /* Resources */,
208 | );
209 | buildRules = (
210 | );
211 | dependencies = (
212 | 48B78BCE1A5E382400B662F7 /* PBXTargetDependency */,
213 | );
214 | name = XXNibBridgeDemoTests;
215 | productName = XXNibBridgeDemoTests;
216 | productReference = 48B78BCC1A5E382400B662F7 /* XXNibBridgeDemoTests.xctest */;
217 | productType = "com.apple.product-type.bundle.unit-test";
218 | };
219 | /* End PBXNativeTarget section */
220 |
221 | /* Begin PBXProject section */
222 | 48B78BAB1A5E382400B662F7 /* Project object */ = {
223 | isa = PBXProject;
224 | attributes = {
225 | CLASSPREFIX = XX;
226 | LastUpgradeCheck = 0610;
227 | ORGANIZATIONNAME = sunnyxx;
228 | TargetAttributes = {
229 | 48B78BB21A5E382400B662F7 = {
230 | CreatedOnToolsVersion = 6.1.1;
231 | };
232 | 48B78BCB1A5E382400B662F7 = {
233 | CreatedOnToolsVersion = 6.1.1;
234 | TestTargetID = 48B78BB21A5E382400B662F7;
235 | };
236 | };
237 | };
238 | buildConfigurationList = 48B78BAE1A5E382400B662F7 /* Build configuration list for PBXProject "XXNibBridgeDemo" */;
239 | compatibilityVersion = "Xcode 3.2";
240 | developmentRegion = English;
241 | hasScannedForEncodings = 0;
242 | knownRegions = (
243 | en,
244 | Base,
245 | );
246 | mainGroup = 48B78BAA1A5E382400B662F7;
247 | productRefGroup = 48B78BB41A5E382400B662F7 /* Products */;
248 | projectDirPath = "";
249 | projectRoot = "";
250 | targets = (
251 | 48B78BB21A5E382400B662F7 /* XXNibBridgeDemo */,
252 | 48B78BCB1A5E382400B662F7 /* XXNibBridgeDemoTests */,
253 | );
254 | };
255 | /* End PBXProject section */
256 |
257 | /* Begin PBXResourcesBuildPhase section */
258 | 48B78BB11A5E382400B662F7 /* Resources */ = {
259 | isa = PBXResourcesBuildPhase;
260 | buildActionMask = 2147483647;
261 | files = (
262 | 48B78BC21A5E382400B662F7 /* Main.storyboard in Resources */,
263 | 48B78BEA1A5E6B2700B662F7 /* XXDogeView.xib in Resources */,
264 | 48B78BC71A5E382400B662F7 /* LaunchScreen.xib in Resources */,
265 | 48B78BC41A5E382400B662F7 /* Images.xcassets in Resources */,
266 | 48B78BEC1A5E6B2700B662F7 /* XXSarkView.xib in Resources */,
267 | 488DAAFE1B95BA2A00680E56 /* XXConvensionCell.xib in Resources */,
268 | );
269 | runOnlyForDeploymentPostprocessing = 0;
270 | };
271 | 48B78BCA1A5E382400B662F7 /* Resources */ = {
272 | isa = PBXResourcesBuildPhase;
273 | buildActionMask = 2147483647;
274 | files = (
275 | );
276 | runOnlyForDeploymentPostprocessing = 0;
277 | };
278 | /* End PBXResourcesBuildPhase section */
279 |
280 | /* Begin PBXSourcesBuildPhase section */
281 | 48B78BAF1A5E382400B662F7 /* Sources */ = {
282 | isa = PBXSourcesBuildPhase;
283 | buildActionMask = 2147483647;
284 | files = (
285 | 48B78BDF1A5E38AF00B662F7 /* XXNibBridge.m in Sources */,
286 | 48B78BE91A5E6B2700B662F7 /* XXDogeView.m in Sources */,
287 | 48B78BEB1A5E6B2700B662F7 /* XXSarkView.m in Sources */,
288 | 488DAAFD1B95BA2A00680E56 /* XXConvensionCell.m in Sources */,
289 | 48ADAFEE1A5FD274008F2ED8 /* XXNibConvention.m in Sources */,
290 | 488DAB011B95BA4400680E56 /* XXMainViewController.m in Sources */,
291 | 48B78BE81A5E6B2700B662F7 /* XXAppDelegate.m in Sources */,
292 | 48B78BB91A5E382400B662F7 /* main.m in Sources */,
293 | );
294 | runOnlyForDeploymentPostprocessing = 0;
295 | };
296 | 48B78BC81A5E382400B662F7 /* Sources */ = {
297 | isa = PBXSourcesBuildPhase;
298 | buildActionMask = 2147483647;
299 | files = (
300 | 48B78BD31A5E382400B662F7 /* XXNibBridgeDemoTests.m in Sources */,
301 | );
302 | runOnlyForDeploymentPostprocessing = 0;
303 | };
304 | /* End PBXSourcesBuildPhase section */
305 |
306 | /* Begin PBXTargetDependency section */
307 | 48B78BCE1A5E382400B662F7 /* PBXTargetDependency */ = {
308 | isa = PBXTargetDependency;
309 | target = 48B78BB21A5E382400B662F7 /* XXNibBridgeDemo */;
310 | targetProxy = 48B78BCD1A5E382400B662F7 /* PBXContainerItemProxy */;
311 | };
312 | /* End PBXTargetDependency section */
313 |
314 | /* Begin PBXVariantGroup section */
315 | 48B78BC01A5E382400B662F7 /* Main.storyboard */ = {
316 | isa = PBXVariantGroup;
317 | children = (
318 | 48B78BC11A5E382400B662F7 /* Base */,
319 | );
320 | name = Main.storyboard;
321 | sourceTree = "";
322 | };
323 | 48B78BC51A5E382400B662F7 /* LaunchScreen.xib */ = {
324 | isa = PBXVariantGroup;
325 | children = (
326 | 48B78BC61A5E382400B662F7 /* Base */,
327 | );
328 | name = LaunchScreen.xib;
329 | sourceTree = "";
330 | };
331 | /* End PBXVariantGroup section */
332 |
333 | /* Begin XCBuildConfiguration section */
334 | 48B78BD41A5E382400B662F7 /* Debug */ = {
335 | isa = XCBuildConfiguration;
336 | buildSettings = {
337 | ALWAYS_SEARCH_USER_PATHS = NO;
338 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x";
339 | CLANG_CXX_LIBRARY = "libc++";
340 | CLANG_ENABLE_MODULES = YES;
341 | CLANG_ENABLE_OBJC_ARC = YES;
342 | CLANG_WARN_BOOL_CONVERSION = YES;
343 | CLANG_WARN_CONSTANT_CONVERSION = YES;
344 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
345 | CLANG_WARN_EMPTY_BODY = YES;
346 | CLANG_WARN_ENUM_CONVERSION = YES;
347 | CLANG_WARN_INT_CONVERSION = YES;
348 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
349 | CLANG_WARN_UNREACHABLE_CODE = YES;
350 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
351 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
352 | COPY_PHASE_STRIP = NO;
353 | ENABLE_STRICT_OBJC_MSGSEND = YES;
354 | GCC_C_LANGUAGE_STANDARD = gnu99;
355 | GCC_DYNAMIC_NO_PIC = NO;
356 | GCC_OPTIMIZATION_LEVEL = 0;
357 | GCC_PREPROCESSOR_DEFINITIONS = (
358 | "DEBUG=1",
359 | "$(inherited)",
360 | );
361 | GCC_SYMBOLS_PRIVATE_EXTERN = NO;
362 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
363 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
364 | GCC_WARN_UNDECLARED_SELECTOR = YES;
365 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
366 | GCC_WARN_UNUSED_FUNCTION = YES;
367 | GCC_WARN_UNUSED_VARIABLE = YES;
368 | IPHONEOS_DEPLOYMENT_TARGET = 8.1;
369 | MTL_ENABLE_DEBUG_INFO = YES;
370 | ONLY_ACTIVE_ARCH = YES;
371 | SDKROOT = iphoneos;
372 | };
373 | name = Debug;
374 | };
375 | 48B78BD51A5E382400B662F7 /* Release */ = {
376 | isa = XCBuildConfiguration;
377 | buildSettings = {
378 | ALWAYS_SEARCH_USER_PATHS = NO;
379 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x";
380 | CLANG_CXX_LIBRARY = "libc++";
381 | CLANG_ENABLE_MODULES = YES;
382 | CLANG_ENABLE_OBJC_ARC = YES;
383 | CLANG_WARN_BOOL_CONVERSION = YES;
384 | CLANG_WARN_CONSTANT_CONVERSION = YES;
385 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
386 | CLANG_WARN_EMPTY_BODY = YES;
387 | CLANG_WARN_ENUM_CONVERSION = YES;
388 | CLANG_WARN_INT_CONVERSION = YES;
389 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
390 | CLANG_WARN_UNREACHABLE_CODE = YES;
391 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
392 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
393 | COPY_PHASE_STRIP = YES;
394 | ENABLE_NS_ASSERTIONS = NO;
395 | ENABLE_STRICT_OBJC_MSGSEND = YES;
396 | GCC_C_LANGUAGE_STANDARD = gnu99;
397 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
398 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
399 | GCC_WARN_UNDECLARED_SELECTOR = YES;
400 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
401 | GCC_WARN_UNUSED_FUNCTION = YES;
402 | GCC_WARN_UNUSED_VARIABLE = YES;
403 | IPHONEOS_DEPLOYMENT_TARGET = 8.1;
404 | MTL_ENABLE_DEBUG_INFO = NO;
405 | SDKROOT = iphoneos;
406 | VALIDATE_PRODUCT = YES;
407 | };
408 | name = Release;
409 | };
410 | 48B78BD71A5E382400B662F7 /* Debug */ = {
411 | isa = XCBuildConfiguration;
412 | buildSettings = {
413 | ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
414 | INFOPLIST_FILE = XXNibBridgeDemo/Info.plist;
415 | IPHONEOS_DEPLOYMENT_TARGET = 7.0;
416 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks";
417 | PRODUCT_NAME = "$(TARGET_NAME)";
418 | };
419 | name = Debug;
420 | };
421 | 48B78BD81A5E382400B662F7 /* Release */ = {
422 | isa = XCBuildConfiguration;
423 | buildSettings = {
424 | ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
425 | INFOPLIST_FILE = XXNibBridgeDemo/Info.plist;
426 | IPHONEOS_DEPLOYMENT_TARGET = 7.0;
427 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks";
428 | PRODUCT_NAME = "$(TARGET_NAME)";
429 | };
430 | name = Release;
431 | };
432 | 48B78BDA1A5E382400B662F7 /* Debug */ = {
433 | isa = XCBuildConfiguration;
434 | buildSettings = {
435 | BUNDLE_LOADER = "$(TEST_HOST)";
436 | FRAMEWORK_SEARCH_PATHS = (
437 | "$(SDKROOT)/Developer/Library/Frameworks",
438 | "$(inherited)",
439 | );
440 | GCC_PREPROCESSOR_DEFINITIONS = (
441 | "DEBUG=1",
442 | "$(inherited)",
443 | );
444 | INFOPLIST_FILE = XXNibBridgeDemoTests/Info.plist;
445 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks";
446 | PRODUCT_NAME = "$(TARGET_NAME)";
447 | TEST_HOST = "$(BUILT_PRODUCTS_DIR)/XXNibBridgeDemo.app/XXNibBridgeDemo";
448 | };
449 | name = Debug;
450 | };
451 | 48B78BDB1A5E382400B662F7 /* Release */ = {
452 | isa = XCBuildConfiguration;
453 | buildSettings = {
454 | BUNDLE_LOADER = "$(TEST_HOST)";
455 | FRAMEWORK_SEARCH_PATHS = (
456 | "$(SDKROOT)/Developer/Library/Frameworks",
457 | "$(inherited)",
458 | );
459 | INFOPLIST_FILE = XXNibBridgeDemoTests/Info.plist;
460 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks";
461 | PRODUCT_NAME = "$(TARGET_NAME)";
462 | TEST_HOST = "$(BUILT_PRODUCTS_DIR)/XXNibBridgeDemo.app/XXNibBridgeDemo";
463 | };
464 | name = Release;
465 | };
466 | /* End XCBuildConfiguration section */
467 |
468 | /* Begin XCConfigurationList section */
469 | 48B78BAE1A5E382400B662F7 /* Build configuration list for PBXProject "XXNibBridgeDemo" */ = {
470 | isa = XCConfigurationList;
471 | buildConfigurations = (
472 | 48B78BD41A5E382400B662F7 /* Debug */,
473 | 48B78BD51A5E382400B662F7 /* Release */,
474 | );
475 | defaultConfigurationIsVisible = 0;
476 | defaultConfigurationName = Release;
477 | };
478 | 48B78BD61A5E382400B662F7 /* Build configuration list for PBXNativeTarget "XXNibBridgeDemo" */ = {
479 | isa = XCConfigurationList;
480 | buildConfigurations = (
481 | 48B78BD71A5E382400B662F7 /* Debug */,
482 | 48B78BD81A5E382400B662F7 /* Release */,
483 | );
484 | defaultConfigurationIsVisible = 0;
485 | defaultConfigurationName = Release;
486 | };
487 | 48B78BD91A5E382400B662F7 /* Build configuration list for PBXNativeTarget "XXNibBridgeDemoTests" */ = {
488 | isa = XCConfigurationList;
489 | buildConfigurations = (
490 | 48B78BDA1A5E382400B662F7 /* Debug */,
491 | 48B78BDB1A5E382400B662F7 /* Release */,
492 | );
493 | defaultConfigurationIsVisible = 0;
494 | defaultConfigurationName = Release;
495 | };
496 | /* End XCConfigurationList section */
497 | };
498 | rootObject = 48B78BAB1A5E382400B662F7 /* Project object */;
499 | }
500 |
--------------------------------------------------------------------------------