FCIPAddressGeocoder
:iphone: :earth_africa: iOS geocoder for geocode device IP Address location using GeoIP service(s) and a block-based syntax.
Install / Use
/learn @fabiocaccamo/FCIPAddressGeocoderREADME
FCIPAddressGeocoder

iOS Geocoder for geocode device IP Address location using GeoIP service(s) and a block-based syntax.
Supported Services
- FreeGeoIP - GitHub
- IP-Api
- IPInfo
- IPVigilante
- Nekudo
- Petabyet
- ~~Smart-IP~~
- Telize (this service is not free anymore, you can spin up your own instance or subscribe to a paid plan)
(feel free to suggest other services to support)
Requirements & Dependecies
- iOS >= 5.0
- ARC enabled
- CoreLocation Framework
Installation
CocoaPods:
pod 'FCIPAddressGeocoder'
Manual install:
Copy FCIPAddressGeocoder.h and FCIPAddressGeocoder.m to your project.
Usage
//the service used by default is FreeGeoIP, but you can set the default service to another one
//this method will affect the default service/url of all instances, included the shared one
//if you need to change the default service/url it's recommended to do it application:didFinishLaunching
[FCIPAddressGeocoder setDefaultService:FCIPAddressGeocoderServiceFreeGeoIP];
//some services like FreeGeoIP are open-source, and you could need to use an instance of it running on your own server
[FCIPAddressGeocoder setDefaultService:FCIPAddressGeocoderServiceFreeGeoIP andURL:@"http://127.0.0.1/"];
//you can use the shared instance
FCIPAddressGeocoder *geocoder = [FCIPAddressGeocoder sharedGeocoder];
//or create a new geocoder
FCIPAddressGeocoder *geocoder = [FCIPAddressGeocoder new];
//or create a new geocoder which uses a custom instance of the FreeGeoIP service installed on your own server
FCIPAddressGeocoder *geocoder = [[FCIPAddressGeocoder alloc] initWithService:FCIPAddressGeocoderServiceFreeGeoIP andURL:@"http://127.0.0.1/"];
//set if the geocoder can use all available services in case of failure of the default one
//very useful since 3rd party services are not depending by us and could be temporary unavailable or no more active
//by default this property value is set to YES only if you use the shared geocoder or if you create a geocoder without specifing its service/url
geocoder.canUseOtherServicesAsFallback = YES;
//IP Address geocoding (geocoding results are cached for 1 minute)
[geocoder geocode:^(BOOL success) {
if(success)
{
//you can access the location info-dictionary containing all informations using 'geocoder.locationInfo'
//you can access the location using 'geocoder.location'
//you can access the location city using 'geocoder.locationCity' (it could be nil)
//you can access the location country using 'geocoder.locationCountry'
//you can access the location country-code using 'geocoder.locationCountryCode'
}
else {
//you can debug what's going wrong using: 'geocoder.error'
}
}];
//check if geocoding
[geocoder isGeocoding]; //returns YES or NO
//cancel geocoding
[geocoder cancelGeocode];
License
Released under MIT License.
Related Skills
node-connect
341.6kDiagnose OpenClaw node connection and pairing failures for Android, iOS, and macOS companion apps
frontend-design
84.6kCreate distinctive, production-grade frontend interfaces with high design quality. Use this skill when the user asks to build web components, pages, or applications. Generates creative, polished code that avoids generic AI aesthetics.
openai-whisper-api
341.6kTranscribe audio via OpenAI Audio Transcriptions API (Whisper).
commit-push-pr
84.6kCommit, push, and open a PR
