Skip to content →

diego.org Posts

Undefined symbols: _SCNetworkReachabilityCreateWithName

I was recently adding some code to check for the availability of the network, so I can display an error to the user if unavailable.

I looked at the SeismicXML application and borrowed the following code:

// Use the SystemConfiguration framework to determine if the host that provides
// the RSS feed is available.
- (BOOL)isDataSourceAvailable
{
    static BOOL checkNetwork = YES;
    if (checkNetwork) { 
// Since checking the reachability of a host can be expensive, 
// cache the result and perform the reachability check once.
        checkNetwork = NO;
        
        Boolean success;    
        const char *host_name = "earthquake.usgs.gov";
		//const char *host_name = "localhost";

        SCNetworkReachabilityRef reachability =
SCNetworkReachabilityCreateWithName(NULL, host_name);
        SCNetworkReachabilityFlags flags;
        success = SCNetworkReachabilityGetFlags(reachability, &flags);
        _isDataSourceAvailable = success && 
(flags & kSCNetworkFlagsReachable) && 
!(flags & kSCNetworkFlagsConnectionRequired);
        CFRelease(reachability);
    }
    return _isDataSourceAvailable;
}

I wouldn’t compile unless I added the following import:

#import <SystemConfiguration/SystemConfiguration.h> 

After adding this I still go 2 more errors, but these were a bit more cryptic.

 Undefined symbols:
"_SCNetworkReachabilityCreateWithName", referenced from:
-[TheElementsAppDelegate isDataSourceAvailable] in TheElementsAppDelegate.o
"_SCNetworkReachabilityGetFlags", referenced from:
-[TheElementsAppDelegate isDataSourceAvailable] in TheElementsAppDelegate.o
ld: symbol(s) not found
collect2: ld returned 1 exit status

After some digging around I realized that I was missing the SystemConfiguration.framework framework.

So here is what I did to add it.
1. I right click on “Frameworks” and choose: Add < Existing Framework
add_framework

2. Browsed to the file: /System/Library/Frameworks/SystemConfiguration.framework

3. Rebuilt the project and my error was gone.

7 Comments

Install SUN JDK on Fedora 10

Installing the SUN JDK on Fedora is pretty simple. Here are some steps you can follow:

1. Go to: http://java.sun.com/javase/downloads/index.jsp

2. Click the download button next to: “Java SE Development Kit (JDK) 6 Update 11” or which ever version you want.

3. On the next page, select Platform: “Linux” and Language: “Multi-language”.  Click on Continue.

4. Then click on the file to download: jdk-6u11-linux-i586.bin  This will download the file to your computer.

5.  Next we need to make the file executable:
     chmod a+x jdk-6u11-linux-i586.bin

6. Then run the installer:
     ./ jdk-6u11-linux-i586.bin

You’ll need to read the Terms & Conditions and accept them.

At this point you can use it as it or set it up more.  Here is what I did.

7.  As root I moved it to /usr/local
     sudo mv  jdk1.6.0_11 /usr/local

8. Then I updated my .bashrc to add it to my path:
     vi ~/.bashrc

Add the following:
export JAVA_HOME=/usr/local/jdk1.6.0_11
export PATH=$PATH:$JAVA_HOME/bin

9.  Now to use java either source the .bashrc like:
     source ~/.bashrc

Or open a new terminal window.

Note 1: Note, these steps should work on most linux distros.

Note 2: If you already have OpenJDK installed, you can remove it with:
     # yum remove java-1.6.0-openjdk java-1.6.0-openjdk-plugin

Note 3: If you are missing some dependancies, you can add them like:
     # yum install compat-libstdc++-33 compat-libstdc++-296

Adding javac to your Path
To make javac available to any individual user, just add the following to each user’s path:

export JAVA_HOME=/usr/local/jdk1.6.0_11
export PATH=$PATH:$JAVA_HOME/bin

For example, if you have a user called doug, you’d open:
/home/doug/.bashrc

And add the 2 export command. (This assume you are using bash and the /home/doug is your home directory)

If you want to make is available to all users, as root edit the file:
/etc/profile

And again add:
export JAVA_HOME=/usr/local/jdk1.6.0_11
export PATH=$PATH:$JAVA_HOME/bin

If your shell is tcsh, you can add it here:
/etc/csh.cshrc

Firefox Plugin
You need to manuallly install the plugin. I followed the instructions in this thread: http://www.e-graviton.com/ird/node/195

On my Linux box, the plugins directory does not exist. So I have to create a new one first. Here are the steps:

1. Make a symbolic link:
$ mkdir plugins
$ pwd
/home/doug/.mozilla/plugins
$ ln -s /usr/local/jdk1.6.0_11/jre/plugin/i386/ns7/libjavaplugin_oji.so ./libjavaplugin_oji.so
$ ls
libjavaplugin_oji.so
$

2. Then I added the following lines to my .bash_profile
MOZ_PLUGIN_PATH=$HOME/.mozilla/plugins
export MOZ_PLUGIN_PATH

3. Log off and log on again, start the firefox, and I can run the java applet on linux!

5 Comments

Distribution Provisioning Profile not showing up

I recently spent about 2 hours trying to get my Distribution Provisioning Profile to show up. I followed the instructions and did everything, but still it would not show up.

Then I came across this thread: http://www.v2ex.com/2008/10/22/distribution-provisioning-profile-not-showing-up/

The first suggestion was to create a new project. I created a new project and my Distribution Provisioning profile appeared in it. Then I went back to my main project and it appeared there too. Problem solved!

Comments closed

Adobe Flex ComboBox Cell Padding

Recently I was trying to figure out how to make the padding in the cells of a <mx:comboBox> smaller than the default. This proved to be much harder than I thought. But I eventually found a solution.

Here is what the default looks like:

Here is the code I came up with:

<mx:Script xmlns:mx="http://www.adobe.com/2006/mxml">
<!&#91;CDATA&#91;
import mx.controls.Alert;
import mx.core.Application;
import mx.events.DropdownEvent;
public var app:* = Application( Application.application );
private function comboBox_open(evt:DropdownEvent):void {
evt.currentTarget.dropdown.variableRowHeight = true;
}
&#93;&#93;>
</mx:Script>
<mx:ComboBox id=”myComboBox” dataProvider=”{mx.core.Application.application.bbapp.cityXML}” labelField=”NAME”
close=”app.closeHandler(event)” cornerRadius=”0? dropdownStyleName=”gameSelectBox” visible=”false” fontSize=”12? open=”comboBox_open(event);”>
<mx:itemRenderer>
<mx:Component>
<mx:Label text=”{data.NAME}” paddingTop=”-5? paddingBottom=”-5?/>
</mx:Component>
</mx:itemRenderer>
</mx:ComboBox>
</mx:HBox>

And here is the final output:

 

One Comment

Open Link in Safari

Here some sample code showing you how to open a link in Safari when clicked on in your UIWebView. The method shouldStartLoadWithRequest is a delegate method that is called when a link is clicked on. You can override the method and tell it to open in Safari.

- (BOOL)webView:(UIWebView *)webView 
     shouldStartLoadWithRequest:(NSURLRequest *)request
     navigationType:(UIWebViewNavigationType)navigationType; {

    NSURL *requestURL = [ [ request URL ] retain ]; 
    // Check to see what protocol/scheme the requested URL is.
    if ( ( [ [ requestURL scheme ] isEqualToString: @"http" ] 
    	|| [ [ requestURL scheme ] isEqualToString: @"https" ] ) 
    	&& ( navigationType == UIWebViewNavigationTypeLinkClicked ) ) {
        return ![ [ UIApplication sharedApplication ] openURL: [ requestURL autorelease ] ]; 
   	}
    // Auto release 
    [ requestURL release ];
    // If request url is something other than http or https it will open 
    // in UIWebView. You could also check for the other following 
    // protocols: tel, mailto and sms
    return YES;
}
 
4 Comments

PostgreSQL Sequences

Today I was trying to figure out the name of a sequence in the db, so I could add it to my hibernate mapping.  I usually use pgAdmin, but that wasn’t an option today.  After some searching, I eventually figured it out, but it took me awhile…

Get a list of all Sequences in a schema:

select sequence_name from information_schema.sequences where sequence_schema='public'

Get a list of all tables:

select table_name from information_schema.tables where table_schema='public'

 
Get the next sequence value for sequence: foo_seq

SELECT setval('foo_seq', 42);

 
Update the sequence to 42 for sequence: foo_seq

select nextval('foo_seq');

 
Note if you are looking for more info on sequences check here: Sequence-Manipulation Functions

Comments closed

iPhone App: KQED Daily Schedule

My first iPhone application was posted on the Apple App Store today.  The KQED Daily Schedule

 I’m always interested in what is currently playing on KQED, my local NPR affiliate.  So I created an application that download the Radio and TV schedule and diplays it on the iPhone.  It tells you the program, time, description if available and link to more information.  I hope you enjoy it.    You can download it for FREE from the App Store here:  KQED.app

More info and screenshots can be found on the iPhone App Page

This application is not affiliated with KQED.  It uses RSS feeds provided by KQED  (http://www.kqed.org/community/rss/) and NPR (http://www.npr.org/rss/) to create an iPhone experience.

Comments closed

How To Rename an iPhone XCode Project

I recent created a new iPhone XCode project based off of one of the samples provided by Apple. Beause of this the XCode project was called AppleSample.xcodeproj and it built an app called AppleSample.app. I wanted to rename the project and give it my own name. It’s not as easy as it sounds. Here are some instructions which are based off some instructions I found here (http://aplus.rs/cocoa/how-to-rename-project-in-xcode-3x/)

  • Copy/rename the folder into new name
  • Get inside the new folder and rename the .pch and .xcodeproj files. Example rename AppleSample.xcodeproj to MyCoolApp.xcodeproj — and — rename AppleSamplePrefix.pch to MyCoolApp_Prefix.pch
  • Delete the build folder. (Using the finder)
  • Open .xcodeproj file in text editor, like TextMate or TextWrangler. That’s actually a folder, which contains 4 files (you can also right-click and do Show package contents, which will reveal the files)
  • Open project.pbxproj in text editor and replace all instances of the old name with the new name. Be careful not to do a find an replace. Since the default name was AppleSample, there were several references to: AppleSampleAppDelegate.h and AppleSampleAppDelegate.m. You do not want to replace these unless you also rename that file.
  • Open .pbxuser where is your user name. Then repeat the previous step by renaming. I’m not sure if this is necessary. You may even be able to delete this file? But changing this file worked for me.
  • Load the project file in XCode, do Build/Clean all targets

After following these steps, I was able to open the project and build it to the simulator and the device.

I had one additional problem that I came across later that required a fix. When I finially built the application for “deployment” to the App Store, I had problems signing the code. I complained that it couldn’t find the Certificate for “Scott Anguish”. I looked in the build settings and couldn’t find reference to this name. So again I opened project.pbxproj inside of MyCoolApp.xcodeproj and found 2 instances of this line:

CODE_SIGN_IDENTITY = “Scott Anguish”;

I replaced both of them with the correct code signing identity and it worked!

UPDATE: Check out this bash script which does it for you automatically:
renameXcodeProject.sh

7 Comments

XCode 3 Debugger and Screenshots

I’ve been doing some iPhone development with XCode recently and had problems using the debugger on the device (not the simulator) and also with taking screenshots.

When installing an application on to the device, the debugger would say:

"Failed to start remote debugserver for MyApp.app"

I search around looking for a solution. In a thread somewhere, someone suggested reinstalling the SDK from scratch. I had first installed the SDK about a year ago when it came out. I then installed several updates over it. For whatever reason, that cause problems.

After reinstalling the latest SDK from Apple website, the debugger worked perfectly! And I was able to take screenshots from the device.

Comments closed